MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
C++の基礎 - ユーザとグループのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
C++の基礎 - ユーザとグループ
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == <br><br> == Linuxのグループの取得 == 以下の例では、現在のユーザが所属しているグループ名を取得している。<br> <br> 標準C++とPOSIX APIのみを使用している。<br> ただし、この実装はUNIX系システム (Linux、MacOS) 向けであるため、Windowsでは動作しないことに注意すること。<br> Windowsで同様の機能を実装する場合は、Windows APIを使用する必要がある。<br> <br> このサンプルコードは、以下に示すような手順で動作する。<br> # まず、現在のユーザのUIDを取得する。 # UIDを使用してユーザ情報を取得する。 # UNIX系システム向けのgetgrouplist関数を使用して、ユーザが所属するグループの数とIDを取得する。 # 各グループIDに対して、getgrgid関数を使用してグループ名を取得する。 # 取得したグループ名をstd::std::vector<std::string>クラスに追加する。 <br> <syntaxhighlight lang="c++"> #include <iostream> #include <vector> #include <string> #include <cstring> #include <grp.h> #include <pwd.h> #include <unistd.h> #include <sys/types.h> #include <errno.h> std::vector<std::string> getUserGroups(std::string& errorMessage) { std::vector<std::string> groups; errorMessage.clear(); uid_t uid = getuid(); struct passwd *pw = getpwuid(uid); if (!pw) { errorMessage = "Failed to get user info: " + std::string(strerror(errno)); return groups; } int ngroups = 0; if (getgrouplist(pw->pw_name, pw->pw_gid, nullptr, &ngroups) == -1) { errorMessage = "Failed to get group list size"; return groups; } if (ngroups > 0) { std::vector<gid_t> gids(ngroups); if (getgrouplist(pw->pw_name, pw->pw_gid, gids.data(), &ngroups) == -1) { errorMessage = "Failed to get group list"; return groups; } for (int i = 0; i < ngroups; i++) { errno = 0; struct group *gr = getgrgid(gids[i]); if (gr) { groups.push_back(std::string(gr->gr_name)); } else { std::cerr << "Failed to get group name for gid " << gids[i] << ": " << strerror(errno) << std::endl; } } } else { errorMessage = "User is not a member of any groups"; } return groups; } </syntaxhighlight> <br> <syntaxhighlight lang="c++"> // 使用例 int main() { std::string errorMessage; std::vector<std::string> userGroups = getUserGroups(errorMessage); if (!errorMessage.empty()) { std::cerr << "Error occurred: " << errorMessage << std::endl; } else if (userGroups.empty()) { std::cout << "User is not a member of any groups" << std::endl; } else { std::cout << "User groups:" << std::endl; for (const auto& group : userGroups) { std::cout << " " << group << std::endl; } } return 0; } </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:C++]]
C++の基礎 - ユーザとグループ
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse