这是我的问题: 在 C 中,我创建了一个文件的副本(有一些更改) 这是通过 fopen()、getchar 和 putchar 轻松完成的。复制文件很好,输出文件本身就是我想要的。
我的问题是:我假设我会经常将这个程序用作 sudo,然后生成的文件既有另一个所有者(root)又有不同的权限(执行权限消失了)。
我的问题是:如何复制原始文件的所有者和权限,然后将它们写入新文件?
这是我的问题: 在 C 中,我创建了一个文件的副本(有一些更改) 这是通过 fopen()、getchar 和 putchar 轻松完成的。复制文件很好,输出文件本身就是我想要的。
我的问题是:我假设我会经常将这个程序用作 sudo,然后生成的文件既有另一个所有者(root)又有不同的权限(执行权限消失了)。
我的问题是:如何复制原始文件的所有者和权限,然后将它们写入新文件?
使用fstat (2) 系统调用来获取有关所有者和权限的详细信息,并使用fchmod (2) 和fchown (2) 系统调用来设置它们。请参阅*BSD cp (1)源代码的setfile函数中的示例。
因为你使用 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
在 linux 下使用 libc fchmod 和 fchown 手册页可以在这里找到: