Я экспериментирую с этой командой dup2 в 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, я ожидаю, что сортировка будет считывать входные данные из канала и записывать вывод в другой канал, который печатается родителем. Но программа сортировки, похоже, не читает никаких данных. Если аргумент командной строки не задан, сортировка читает его справа от stdin? Может ли кто-нибудь помочь мне с этой проблемой, пожалуйста.
Большое спасибо!
Это сделало. благодаря – user2290802