在C中复制文件后保留文件所有者和权限

时间:2011-03-30 13:13:59

标签: c permissions file-ownership

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

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

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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

答案 2 :(得分:0)

在linux下使用libc fchmod和fchown 可以在此处找到联机帮助页:

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

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