0

Linuxターミナルで、入力できます

echo hello! > /path/to/file

execvを使用して同じことができると思いました:

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

int main(void){
    char *write_cmd[] = { "echo", "hello!", ">", "/path/to/file", NULL};
    if (fork() == 0){
        execv("/bin/echo", write_cmd);
    }
    else{
        sleep(1);
    }
    return 0;
}

ただし、このコードは「hello!」とは書きません。これが私がやりたいことです。execv と echo を使用してこれを行う別の方法はありますか?

編集:解決策として dup2 も使用してみました: #include #include #include

int main(void){
    char *write_cmd[] = { "echo", "hello!", NULL };
    if (fork() == 0){
        int tmpFd = open("/path/to/file", O_WRONLY);
        dup2(tmpFd, 1);
        execv("/bin/echo", write_cmd);
        close(tmpFd);
        exit(0);
    }
    else{
        sleep(1);
    }
    return 0;
}

ただし、これでも私が望む結果は得られません。これは「こんにちは!」と書きます。ファイルに追加されますが、ファイルに既に書き込まれている他のすべてのものも上書きされます。どうすれば「こんにちは!」ということを保証できますか? ファイルの END に書き込まれますか?

4

2 に答える 2