0

这是我的问题: 在 C 中,我创建了一个文件的副本(有一些更改) 这是通过 fopen()、getchar 和 putchar 轻松完成的。复制文件很好,输出文件本身就是我想要的。

我的问题是:我假设我会经常将这个程序用作 sudo,然后生成的文件既有另一个所有者(root)又有不同的权限(执行权限消失了)。

我的问题是:如何复制原始文件的所有者和权限,然后将它们写入新文件?

4

3 回答 3

2

使用fstat (2) 系统调用来获取有关所有者和权限的详细信息,并使用fchmod (2) 和fchown (2) 系统调用来设置它们。请参阅*BSD cp (1)源代码的setfile函数中的示例。

于 2011-03-30T13:19:27.193 回答
2

因为你使用 fopen():

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

//fp is your source filepointer, fdest is your dest filepointer
//fn is the  new filename you're copying to

struct stat fst;
//let's say this wont fail since you already worked OK on that fp
fstat(fileno(fp),&fst);
//update to the same uid/gid
fchown(fileno(fdest),fst.st_uid,fst.st_gid);
//update the permissions 
fchmod(fileno(fdest),fst.st_mode);

作为一个快速说明,您可能想要 fread() 和 fwrite() 而不是 f*char()'ing

于 2011-03-30T13:24:56.597 回答
0

在 linux 下使用 libc fchmod 和 fchown 手册页可以在这里找到:

http://linux.die.net/man/2/fchmod

http://linux.die.net/man/2/fchown

于 2011-03-30T13:18:29.407 回答