- 论坛徽章:
- 0
|
是《unix进程间通信》一书中的习题,如何用未命名管道(c语言)实现类似shell命令像"last | sort |more"
的功能。
我是这样写的,但是没有成功,只能支持两个命令,如 “last | more" 或 "last | sort".
请高手帮忙看看,谢谢。
main(int argc, char *argv[])
{
int f_des[2];
char path[256];
int i;
if(pipe(f_des) == -1) {
perror("Pipe");
exit(1);
}
if(argc < 2) {
printf("Usage: %s cmd\n", *argv);
exit(0);
}
for(i = 1; i < argc - 1; i++) {
switch(fork()) {
case -1:
perror("Fork");
exit(2);
case 0:
memset(path, 0, 256);
sprintf(path, "%s", "/usr/bin/");
snprintf(path + strlen(path), 256, "%s", argv);
printf("%s\n", path);
dup2(f_des[1], fileno(stdout));
if ( i > 1) {
dup2(f_des[0], fileno(stdin));
sleep(1);
}
close(f_des[0]);
close(f_des[1]);
execl(path, argv, (char *) 0);
default:
break;
}
}
sleep(3);
memset(path, 0, 256);
sprintf(path, "%s", "/usr/bin/");
snprintf(path + strlen(path), 256, "%s", argv[argc-1]);
printf("%s\n",path);
dup2(f_des[0], fileno(stdin));
close(f_des[0]);
close(f_des[1]);
execl(path, argv[argc-1], (char *) 0);
} |
|