Linux C,使用与现有文件相同的权限创建新文件

Linux C,使用与现有文件相同的权限创建新文件,c,file,permissions,C,File,Permissions,我必须创建一个程序,创建一个新的或覆盖现有(outfile)文件,内容已经存在的文件(infle)。对我来说,这很容易,我已经做到了。但我的问题是,outfile需要和infle拥有相同的权限,我不知道如何做到这一点 程序名填充输出文件 我的代码是这样的,我认为我需要使用stat()或fstat(),但我不确定如何使用 #include <fcntl.h> #include <stdio.h> #include <unistd.h> #include <

我必须创建一个程序,创建一个新的或覆盖现有(outfile)文件,内容已经存在的文件(infle)。对我来说,这很容易,我已经做到了。但我的问题是,outfile需要和infle拥有相同的权限,我不知道如何做到这一点

程序名填充输出文件

我的代码是这样的,我认为我需要使用stat()或fstat(),但我不确定如何使用

#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>

int main(int argc, char** argv) {

    char* infile = argv[1];
    char* outfile = argv[2];

    int in = open(infile, O_RDONLY, S_IRUSR);
    int out = open(outfile, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR);
    long len = lseek(in, 0L, SEEK_END);
    char buf[len];
    lseek(in, 0L, SEEK_SET);
    read(in, &buf, len);
    write(out, &buf, len);
    close(in);
    close(out);
    return 0;
}
#包括
#包括
#包括
#包括
int main(int argc,字符**argv){
char*infle=argv[1];
char*outfile=argv[2];
int in=打开(仅填充、O_RDONLY、S_IRUSR);
int out=打开(输出文件,O|U创建| O|U WRONLY,S|U IRUSR | S|U IWUSR);
长透镜=lseek(英寸,0升,寻道端);
char-buf[len];
lseek(英寸,0升,寻道集);
读(in,&buf,len);
写(出,&buf,len);
关闭(in);
收尾;
返回0;
}

我知道现在我已经手动设置了权限

使用
stat()。这也有避免可能的竞争条件的优点