我正在 linux 中试验这个 dup2 命令。我编写了如下代码:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main()
{
int pipe1_ends[2];
int pipe2_ends[2];
char string[] = "this \n is \n not \n sorted";
char buffer[100];
pid_t pid;
pipe(pipe1_ends);
pipe(pipe2_ends);
pid = fork();
if(pid > 0) { /* parent */
close(pipe1_ends[0]);
close(pipe2_ends[1]);
write(pipe1_ends[1],string,strlen(string));
read(pipe2_ends[0], buffer, 100);
printf("%s",buffer);
return 0;
}
if(pid == 0) { /* child */
close(pipe1_ends[1]);
close(pipe2_ends[0]);
dup2(pipe1_ends[0], 0);
dup2(pipe2_ends[1],1);
char *args[2];
args[0] = "/usr/bin/sort";
args[1] = NULL;
execv("/usr/bin/sort",args);
}
return 0;
}
我希望这个程序的行为如下:它应该分叉一个孩子并用排序过程替换它的图像。并且由于 stdin 和 stdout 被 dup2 命令替换,我希望 sort 从管道读取输入并将输出写入由父级打印的另一个管道。但是排序程序似乎没有读取任何输入。如果没有给出命令行参数,sort 从标准输入读取它对吗?有人可以帮我解决这个问题吗?
非常感谢!