Unix:在C中复制具有原始权限的文件

Unix:在C中复制具有原始权限的文件,c,linux,unix,C,Linux,Unix,我正试图制作一个复制程序。它类似于linux中的cp函数。我可以使用./copy file1 file2成功复制文件,但不知何故,源文件的预授权没有复制到目标文件。有人知道怎么做吗?示例和代码如下所示:) 我的文件及其原始许可。 已成功复制文件,但未复制权限。 您只需要读取源文件的权限,并在目标文件上设置相同的权限。您可以使用stat()读取权限,并使用chmod()设置权限: #include <sys/stat.h> void copyPermission(const ch

我正试图制作一个复制程序。它类似于linux中的cp函数。我可以使用./copy file1 file2成功复制文件,但不知何故,源文件的预授权没有复制到目标文件。有人知道怎么做吗?示例和代码如下所示:)

我的文件及其原始许可。

已成功复制文件,但未复制权限。


您只需要读取源文件的权限,并在目标文件上设置相同的权限。您可以使用
stat()
读取权限,并使用
chmod()
设置权限:

#include <sys/stat.h>

void copyPermission(const char* fromFile, const char* toFile) {
    struct stat tmp;
    stat(fromFile, &tmp);
    chmod(toFile, tmp.st_mode);
}
另一个选项是仅创建具有正确权限的文件:

而不是:

if ( (out_fd=creat( av[2], COPYMODE)) == -1 )


您只需要读取源文件的权限,并在目标文件上设置相同的权限。您可以使用
stat()
读取权限,并使用
chmod()
设置权限:

#include <sys/stat.h>

void copyPermission(const char* fromFile, const char* toFile) {
    struct stat tmp;
    stat(fromFile, &tmp);
    chmod(toFile, tmp.st_mode);
}
另一个选项是仅创建具有正确权限的文件:

而不是:

if ( (out_fd=creat( av[2], COPYMODE)) == -1 )


还要注意
read()
write()
返回
ssize\u t
,而不是
int
。它们不一样。谢谢你指出这一点。Garg365,我将尝试你提供的方法,我认为它也会起作用。请注意,
read()
write()
返回
ssize\t
,而不是
int
。它们不一样。谢谢你指出这一点。Garg365,我将尝试你提供的方法,我认为它也会起作用,因为文件正在复制,并且过程中有打开的文件描述符,你也可以使用
fstat()
fchmod()
直接在文件描述符上。我相信您给我的第二个解决方案是最好的。谢谢你帮我:)。从中学到的经验教训中,我从来没有想到它会这么简单。安德鲁·亨勒,我将尝试你的方法,并很快更新解决方案。(如果有效)由于文件正在被复制,并且过程中有打开的文件描述符,您也可以直接在文件描述符上使用
fstat()
fchmod()
。我相信您给我的第二个解决方案是最好的。谢谢你帮我:)。从中学到的经验教训中,我从来没有想到它会这么简单。安德鲁·亨勒,我将尝试你的方法,并很快更新解决方案。(如果有效)
if ( (out_fd=creat( av[2], file1.st_mode)) == -1 )