27696


コマンドをファイルに出力するCプログラムを書いているのですがファイルに書き込まれません

[code]

    #include<stdio.h>
    #include<unistd.h>
    #include<stdlib.h>
    #include<fcntl.h>
    #include<sys/wait.h>
    
    int main(){
     int status;
     int fd;
     printf("Exec ps program.../\n");
     if((fd= open("processlist.txt",O_WRONLY|O_CREAT|O_TRUNC,0777))==-1){
      perror("open failed");
      exit(EXIT_FAILURE);
     }
     printf("close(1)\n");
     execlp("ps","ps","-e","-1",NULL);
     close(1);
     if(dup(fd)!=1){
      perror("dup failed");
      close(fd);
      exit(EXIT_FAILURE);
     }
     execlp("ps","ps","-e","-1",NULL);
     close(fd);
     printf("done,\n");
    }
    
[/code]

もし、出力を乗っ取れていなければ perror("dup failed");でその趣旨が出力されるのでしょうが、その出力はありません。  
close(1);まで確実に到達していることは確認しました。  
しかし最終的に出力されるファイルは空です。  
プログラムを見なおしても原因がどこにあるのかわからないのですが、どんなことが原因として考えられますか


CC BY-SA 3.0
2016-07-18T02:58:35.420
27693
2016-07-18T04:09:46.317
10455
question
c ubuntu posix
コマンドをファイルに出力するCプログラムを書いているのですがファイルに書き込まれません


[exec()系関数](https://linuxjm.osdn.jp/html/LDP_man-pages/man3/exec.3.html)は

> 現在のプロセスイメージを新しいプロセスイメージで置き換える。

もので

> exec() 群の関数が復帰するのは、エラーが発生した場合のみである。

です。つまり成功した場合はexec()系関数は返ってきません。「close(1);まで確実に到達していることは確認しました。」とのことですが、成功しているのであれば到達しないはずであり、確認方法に問題がありませんか？

* * *

目的の処理を行うには`system()`や`popen()`が適切かもしれません。


CC BY-SA 3.0
2016-07-18T03:56:22.110
27696
2016-07-18T04:09:46.317
2016-07-18T04:09:46.317
4236
4236
27693
answer