fork()で子プロセスを生成して"ls -al"を実行し、その実行結果を親に流して親は子プロセスから読み取ったデータをファイルへ書き込んでいるのですがwhile(read(fd[0], buf, sizeof(buf))で止まってしまいます。正しいプログラムにするためにはどのように修正すればよいでしょうか。
c
1#include <stdio.h> 2#include <string.h> 3#include <stdlib.h> 4#include <unistd.h> 5#include <sys/types.h> 6#include <sys/wait.h> 7#include <fcntl.h> 8 9int main(){ 10 int fd[2]; 11 pipe(fd); 12 if(fork() == 0){ 13 close(1); 14 dup(fd[1]); 15 char *cmd[] = {"ls", "-a", "-l", NULL}; 16 execvp(cmd[0], cmd); 17 }else{ 18 int fp = open("test.txt", O_WRONLY | O_CREAT); 19 if(fp == -1) perror("open"); 20 char buf[1024]; 21 close(0); 22 dup(fd[0]); 23 memset(buf, '\0', sizeof(buf)); 24 while(read(fd[0], buf, sizeof(buf))){ 25 write(fp, buf, sizeof(buf)); 26 memset(buf, 0, sizeof(buf)); 27 } 28 close(fp); 29 wait(NULL); 30 } 31 return 0; 32}
"止まる"とは如何なる意味か。
プログラムが停止するのか? その行から次に行かなくなるのか?
回答2件
あなたの回答
tips
プレビュー