<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%A8%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97</id>
	<title>C++の基礎 - ユーザとグループ - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%A8%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97"/>
	<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=C%2B%2B%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%A8%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97&amp;action=history"/>
	<updated>2026-08-22T11:36:42Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://mochiu.net/index.php?title=C%2B%2B%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%A8%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97&amp;diff=13963&amp;oldid=prev</id>
		<title>Wiki: /* 概要 */</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=C%2B%2B%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%A8%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97&amp;diff=13963&amp;oldid=prev"/>
		<updated>2026-01-04T06:52:17Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;概要&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年1月4日 (日) 15:52時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l17&quot;&gt;17行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;17行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;u&amp;gt;Windows環境では、Windows APIを使用した別の実装が必要となる。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;u&amp;gt;Windows環境では、Windows APIを使用した別の実装が必要となる。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;参考文献を以下に示す。&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* [https://pubs.opengroup.org/onlinepubs/9699919799/ POSIX.1-2017 Standard]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* Linux Man Pages:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;** [https://man7.org/linux/man-pages/man3/getpwuid.3.html getpwuid(3)]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;** [https://man7.org/linux/man-pages/man3/getgrgid.3.html getgrgid(3)]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;** [https://man7.org/linux/man-pages/man3/getgrouplist.3.html getgrouplist(3)]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 使用する主なPOSIX API関数 ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 使用する主なPOSIX API関数 ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mochiu_wiki:diff:1.41:old-13961:rev-13963:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>https://mochiu.net/index.php?title=C%2B%2B%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%A8%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97&amp;diff=13961&amp;oldid=prev</id>
		<title>2026年1月4日 (日) 06:47にWikiによる</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=C%2B%2B%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%A8%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97&amp;diff=13961&amp;oldid=prev"/>
		<updated>2026-01-04T06:47:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://mochiu.net/index.php?title=C%2B%2B%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%A8%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97&amp;amp;diff=13961&amp;amp;oldid=10340&quot;&gt;差分を表示&lt;/a&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>https://mochiu.net/index.php?title=C%2B%2B%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%A8%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97&amp;diff=10340&amp;oldid=prev</id>
		<title>Wiki: ページの作成:「== 概要 == &lt;br&gt;&lt;br&gt;  == Linuxのグループの取得 == 以下の例では、現在のユーザが所属しているグループ名を取得している。&lt;br&gt; &lt;br&gt; 標準C++とPOSIX APIのみを使用している。&lt;br&gt; ただし、この実装はUNIX系システム (Linux、MacOS) 向けであるため、Windowsでは動作しないことに注意すること。&lt;br&gt; Windowsで同様の機能を実装する場合は、Windows APIを使用する必要がある。…」</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=C%2B%2B%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%A8%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97&amp;diff=10340&amp;oldid=prev"/>
		<updated>2024-07-28T11:21:29Z</updated>

		<summary type="html">&lt;p&gt;ページの作成:「== 概要 == &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;  == Linuxのグループの取得 == 以下の例では、現在のユーザが所属しているグループ名を取得している。&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; 標準C++とPOSIX APIのみを使用している。&amp;lt;br&amp;gt; ただし、この実装はUNIX系システム (Linux、MacOS) 向けであるため、Windowsでは動作しないことに注意すること。&amp;lt;br&amp;gt; Windowsで同様の機能を実装する場合は、Windows APIを使用する必要がある。…」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 概要 ==&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linuxのグループの取得 ==&lt;br /&gt;
以下の例では、現在のユーザが所属しているグループ名を取得している。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
標準C++とPOSIX APIのみを使用している。&amp;lt;br&amp;gt;&lt;br /&gt;
ただし、この実装はUNIX系システム (Linux、MacOS) 向けであるため、Windowsでは動作しないことに注意すること。&amp;lt;br&amp;gt;&lt;br /&gt;
Windowsで同様の機能を実装する場合は、Windows APIを使用する必要がある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
このサンプルコードは、以下に示すような手順で動作する。&amp;lt;br&amp;gt;&lt;br /&gt;
# まず、現在のユーザのUIDを取得する。&lt;br /&gt;
# UIDを使用してユーザ情報を取得する。&lt;br /&gt;
# UNIX系システム向けのgetgrouplist関数を使用して、ユーザが所属するグループの数とIDを取得する。&lt;br /&gt;
# 各グループIDに対して、getgrgid関数を使用してグループ名を取得する。&lt;br /&gt;
# 取得したグループ名をstd::std::vector&amp;lt;std::string&amp;gt;クラスに追加する。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
 #include &amp;lt;iostream&amp;gt;&lt;br /&gt;
 #include &amp;lt;vector&amp;gt;&lt;br /&gt;
 #include &amp;lt;string&amp;gt;&lt;br /&gt;
 #include &amp;lt;cstring&amp;gt;&lt;br /&gt;
 #include &amp;lt;grp.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;pwd.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 std::vector&amp;lt;std::string&amp;gt; getUserGroups(std::string&amp;amp; errorMessage)&lt;br /&gt;
 {&lt;br /&gt;
    std::vector&amp;lt;std::string&amp;gt; groups;&lt;br /&gt;
    errorMessage.clear();&lt;br /&gt;
 &lt;br /&gt;
    uid_t uid = getuid();&lt;br /&gt;
 &lt;br /&gt;
    struct passwd *pw = getpwuid(uid);&lt;br /&gt;
    if (!pw) {&lt;br /&gt;
       errorMessage = &amp;quot;Failed to get user info: &amp;quot; + std::string(strerror(errno));&lt;br /&gt;
       return groups;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    int ngroups = 0;&lt;br /&gt;
    if (getgrouplist(pw-&amp;gt;pw_name, pw-&amp;gt;pw_gid, nullptr, &amp;amp;ngroups) == -1) {&lt;br /&gt;
       errorMessage = &amp;quot;Failed to get group list size&amp;quot;;&lt;br /&gt;
       return groups;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    if (ngroups &amp;gt; 0) {&lt;br /&gt;
       std::vector&amp;lt;gid_t&amp;gt; gids(ngroups);&lt;br /&gt;
       if (getgrouplist(pw-&amp;gt;pw_name, pw-&amp;gt;pw_gid, gids.data(), &amp;amp;ngroups) == -1) {&lt;br /&gt;
          errorMessage = &amp;quot;Failed to get group list&amp;quot;;&lt;br /&gt;
          return groups;&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       for (int i = 0; i &amp;lt; ngroups; i++) {&lt;br /&gt;
          errno = 0;&lt;br /&gt;
          struct group *gr = getgrgid(gids[i]);&lt;br /&gt;
          if (gr) {&lt;br /&gt;
             groups.push_back(std::string(gr-&amp;gt;gr_name));&lt;br /&gt;
          }&lt;br /&gt;
          else {&lt;br /&gt;
             std::cerr &amp;lt;&amp;lt; &amp;quot;Failed to get group name for gid &amp;quot; &amp;lt;&amp;lt; gids[i] &amp;lt;&amp;lt; &amp;quot;: &amp;quot; &amp;lt;&amp;lt; strerror(errno) &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
       errorMessage = &amp;quot;User is not a member of any groups&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    return groups;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
 // 使用例&lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
    std::string errorMessage;&lt;br /&gt;
    std::vector&amp;lt;std::string&amp;gt; userGroups = getUserGroups(errorMessage);&lt;br /&gt;
 &lt;br /&gt;
    if (!errorMessage.empty()) {&lt;br /&gt;
       std::cerr &amp;lt;&amp;lt; &amp;quot;Error occurred: &amp;quot; &amp;lt;&amp;lt; errorMessage &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    }&lt;br /&gt;
    else if (userGroups.empty()) {&lt;br /&gt;
       std::cout &amp;lt;&amp;lt; &amp;quot;User is not a member of any groups&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
       std::cout &amp;lt;&amp;lt; &amp;quot;User groups:&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
       for (const auto&amp;amp; group : userGroups) {&lt;br /&gt;
          std::cout &amp;lt;&amp;lt; &amp;quot;  &amp;quot; &amp;lt;&amp;lt; group &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
[[カテゴリ:C++]]&lt;/div&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
</feed>