这是我的问题:在C中,我创建了一个文件的副本(有一些更改)这可以通过fopen(),getchar和putchar来完成。 复制文件很好,输出文件本身就是我想要的。
我的问题是:我假设我经常将这个程序用作sudo,然后生成的文件同时具有另一个所有者(root)以及不同的权限(执行权限已经消失)。
我的问题是:如何复制原始文件的所有者和权限,然后将其写入新文件?
答案 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 可以在此处找到联机帮助页: