更改 C 中的所有者和组?

发布于 2024-12-25 10:50:57 字数 164 浏览 2 评论 0原文

我想更改 C 中文件的所有者和组。我用 google 搜索它,但如果只找到一些使用 system()chmod 命令或相关函数的代码。

有没有办法在没有 system() 函数和 Bash 命令的情况下做到这一点?

I want to change owner and group of a file in C. I google it, but if find only some code that use system() and chmod command or relative functions.

Is there a way to do this without system() functions and Bash commands?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

万人眼中万个我 2025-01-01 10:50:57

为了完成答案,在 Linux 上可以使用以下命令(我已经在 Ubuntu 上进行了测试):

#include <sys/types.h>
#include <pwd.h>
#include <grp.h>

void do_chown (const char *file_path,
               const char *user_name,
               const char *group_name) 
{
  uid_t          uid;
  gid_t          gid;
  struct passwd *pwd;
  struct group  *grp;

  pwd = getpwnam(user_name);
  if (pwd == NULL) {
      die("Failed to get uid");
  }
  uid = pwd->pw_uid;

  grp = getgrnam(group_name);
  if (grp == NULL) {
      die("Failed to get gid");
  }
  gid = grp->gr_gid;

  if (chown(file_path, uid, gid) == -1) {
      die("chown fail");
  }
}

To complete the answer, on Linux the following can be used (I've tested on Ubuntu):

#include <sys/types.h>
#include <pwd.h>
#include <grp.h>

void do_chown (const char *file_path,
               const char *user_name,
               const char *group_name) 
{
  uid_t          uid;
  gid_t          gid;
  struct passwd *pwd;
  struct group  *grp;

  pwd = getpwnam(user_name);
  if (pwd == NULL) {
      die("Failed to get uid");
  }
  uid = pwd->pw_uid;

  grp = getgrnam(group_name);
  if (grp == NULL) {
      die("Failed to get gid");
  }
  gid = grp->gr_gid;

  if (chown(file_path, uid, gid) == -1) {
      die("chown fail");
  }
}
蓝颜夕 2025-01-01 10:50:57

您可以使用chmodfchmodat 和/或 fchmod 系统调用。所有三个都位于 中。

对于所有权,有 chownfchownat,均位于 中。

You can use the chmod, fchmodat and/or fchmod system calls. All three are located in <sys/stat.h>.

For ownership, there's chown and fchownat, both in <unistd.h>.

鹿港小镇 2025-01-01 10:50:57

有一个 chown大多数 C 库中的函数:

#include <sys/types.h>
#include <unistd.h>

int chown(const char *path, uid_t owner, gid_t group);

There is a chown function in most C libraries:

#include <sys/types.h>
#include <unistd.h>

int chown(const char *path, uid_t owner, gid_t group);
夏花。依旧 2025-01-01 10:50:57

尝试 man 2 chownman 2 chmod

另请参阅文档此处此处

Try man 2 chown and man 2 chmod.

Also see documentation here and here.

沧笙踏歌 2025-01-01 10:50:57

chown() 就可以了。

man 2 chown

chown() does the trick.

man 2 chown
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文