我正试图通过已在sort的stdin上重叠的管道来推送一些文本文件。它可以工作,但不能自然终止(有趣的是,按下“ enter”(输入)按钮似乎可以做到)。
//child
if(rc == 0)
{
alarm(60);
close(stdin_pipe_fds[1]);
close(0);
dup(stdin_pipe_fds[0]);
close(stdin_pipe_fds[0]);
execve("/usr/bin/sort", argv, NULL);
exit(0);
}
//Parent
if(rc >0)
{
alarm(60);
close(stdin_pipe_fds[0]);
close(stdout_pipe_fds[1]);
close(stderr_pipe_fds[1]);
while(fscanf(coolFile, "%1023s", newWord) ==1)
{
if(strcmp(newWord, "foobar") != 0)
{
write(stdin_pipe_fds[1], newWord, (strlen(newWord)+1));
}
}
if(argc == 2)
{
write(stdin_pipe, argc[2], 2);
}
if(argc == 3)
{
write(stdin_pipe, argc[3], 2);
}
}
}
有什么想法吗?
答案 0 :(得分:0)
这是一种显示相同效果的简便方法:
$ cd /
$ ls -1 & # 1
[1] 58745
myuser@myhost / $ Applications # 2
Library # 3
Network
System
Users
Volumes # 4
相反,您可能只是盲目地键入echo "Hello World"
并按Enter键,您会看到shell响应良好。这纯粹是一个表面问题。
要解决此问题,您应该:
wait()
,这样它就不会在孩子面前退出。