O_FLAGS追加或创建文件。使用C unix中的open()

时间:2017-04-29 21:23:49

标签: c linux file unix

所以我有以下代码。 str_arr []只包含控制台命令ex ls,sort ..和filenames的组合。并执行()分叉子进程。

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);
    }
}

type_arr [y] == 3 时,如果文件存在,代码应该创建或覆盖文件。这有效。但是当 type_arr [y] == 2 代码应该创建或附加文件时,这不起作用,实际上它只能正常打印到控制台,如果文件存在(使用ls),如果文件确实存在它确实创建了一个新文件。这里有什么不对?这些O_FLAGS应该追加或创建文件吗?

1 个答案:

答案 0 :(得分:1)

要附加或创建文件,请使用:

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

并使用第三个参数作为文件权限。感谢@kaylum,Charles Duffy,melpomene。