在c中更改所有者和组

时间:2012-01-08 15:42:04

标签: c linux

我想在c中更改文件的所有者和组。我谷歌它,但如果只找到一些使用system()和chmod命令或相关功能的代码。有没有办法在没有system()函数和bash命令的情况下执行此操作?

谢谢大家。但新问题! : 有没有办法让用户uid和gid而不使用" id -u username"命令在c?解析/ etc / passwd?还是更好的方式?

5 个答案:

答案 0 :(得分:7)

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

对于所有权,fchownat中都有chown<unistd.h>

答案 1 :(得分:7)

要完成答案,在Linux上可以使用以下内容(我在Ubuntu上测试过):

#include <sys/types.h>
#include <pwd.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");
  }
}

答案 2 :(得分:1)

尝试man 2 chownman 2 chmod

另见文档herehere

答案 3 :(得分:1)

chown()可以解决问题。

man 2 chown

答案 4 :(得分:1)

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

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

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