13

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

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

4

5 回答 5

11

要完成答案,可以在 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");
  }
}
于 2016-05-27T18:01:38.067 回答
9

您可以使用chmod,fchmodat和/或fchmod系统调用。这三个都位于<sys/stat.h>

对于所有权,有chownfchownat,两者都在<unistd.h>.

于 2012-01-08T15:44:43.223 回答
1

尝试man 2 chownman 2 chmod

另请参阅此处此处的文档。

于 2012-01-08T15:45:06.997 回答
1

chown()成功了。

man 2 chown
于 2012-01-08T15:46:22.313 回答
1

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

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

int chown(const char *path, uid_t owner, gid_t group);
于 2012-01-08T15:46:34.267 回答