1

Cでシェルを実装していますが、コマンドの出力をファイルにリダイレクトするのに苦労しています。出力をファイルに送信すると、動作しているように見えますが、ファイルが開かず、ls -l を実行すると、次のように表示されます。

---------x   1 warp  staff   441 Nov  4 20:15 output.txt

これは私のコードの一部です

pid = fork();
if(pid == 0) 
{ /* child process */

    if(redirFlag)
    {
        int fdRedir = open(redirectName, O_WRONLY | O_CREAT );
        if( fdRedir < 0){
            perror("Can't Open");
            exit(1);
        }

        if(dup2(fdRedir, STDOUT_FILENO) == -1){
            perror("dup2 failed");
            exit(1);
        }


    } 
    execvp(supplement[0], supplement);
    /* return only when exec fails */
    perror("exec failed");
    exit(-1);
4

1 に答える 1

2

のプロトタイプopenは次のとおりです。

#include <fcntl.h>  
int open(const char *path, int oflag, ...);

ファイルを作成するときは、ファイル モードを指定する必要があります。

int open(const char *path, int oflags, mode_t mode);

あなたのコードでは、ファイルはフラグ付きで開かれてO_CREATいますが、ファイルモードは指定されていません。したがって、それを操作する権限がありません。新しいファイルを作成するときに、ファイルのアクセス許可を指定してみてください。

int fdRedir = open(redirectName, O_WRONLY | O_CREAT, 0644);
于 2013-11-05T01:35:03.080 に答える