附加或创建文件的O_标志。在C unix中使用open()

附加或创建文件的O_标志。在C unix中使用open(),c,linux,file,unix,C,Linux,File,Unix,所以我有下面的代码。str_arr[]只包含控制台命令的组合,例如ls、sort。。和文件名。execute()派生一个子进程 for(int y=0; y<i-1; y++){ if(type_arr[y]==0){ } else if(type_arr[y]==1){ } else if(type_arr[y]==2){ int fw1=open(str_arr[y+1], O_WRONLY | O_APPEND | O_CR

所以我有下面的代码。str_arr[]只包含控制台命令的组合,例如ls、sort。。和文件名。execute()派生一个子进程

for(int y=0; y<i-1; y++){
    if(type_arr[y]==0){

    }
    else if(type_arr[y]==1){

    }
    else if(type_arr[y]==2){
        int fw1=open(str_arr[y+1], O_WRONLY | O_APPEND | O_CREAT |S_IRWXU);
        int sv_out1=dup(1);
        dup2(fw1, 1);
        close(fw1);
        execute(str_arr[y]);
        dup2(sv_out1, 1);
    }
    else if(type_arr[y]==3){
        int fw=open(str_arr[y+1], O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IRGRP | S_IWGRP | S_IWUSR);
        int sv_out=dup(1);
        dup2(fw, 1);
        close(fw);
        execute(str_arr[y]);
        dup2(sv_out, 1);
    }
}

for(int y=0;y要附加或创建文件,请使用:

int fw1=open(str_arr[y+1], O_WRONLY | O_APPEND | O_CREAT, FILE_PERMISSIONS);

并使用文件权限的第三个参数(例如:
file\u permissions=0777

附加或创建文件使用:

int fw1=open(str_arr[y+1], O_WRONLY | O_APPEND | O_CREAT, FILE_PERMISSIONS);

并使用文件权限的第三个参数(例如:
file\u permissions=0777

在您的打开模式下,
S\u IRWXU
在做什么?错误检查在哪里?S\u IRWXU执行以下操作:00700用户(文件所有者)具有读、写和执行权限是的。这些都是权限位。为什么要将它们作为打开模式的一部分传递?因为如果也必须创建,而我没有将创建的文件置于只读模式。这样做毫无意义。现在您已将
O_create
添加到打开模式,您还需要第三个参数(新文件的文件权限)。在打开模式下,
S_IRWXU
在做什么?错误检查在哪里?S_IRWXU执行此操作:00700用户(文件所有者)具有读、写和执行权限是的。这些都是权限位。为什么要将它们作为打开模式的一部分传递?因为如果也必须创建,而我没有将创建的文件置于只读模式。这样做毫无意义。现在您已将
O_create
添加到打开模式,您还需要第三个参数(新文件的文件权限)。