c - 如何在 C 中使用 pipe 和 fork() 执行命令 ls|sort -r?
问题描述
我试图为学校项目解决这个问题,但我不明白如何在管道中打开和关闭读写:问题是:创建一个执行以下命令 ls| 的 C 程序 sort -r 使用管道并创建 fork() 和 dup()
解决方案
int main(int argc, char*argv[])
{
int fd[2];
pid_t p1,p2;
pipe(fd);
if (pipe(fd)==-1){
perror("Erreur pipe");
exit();
}
p1=fork();
if (p1==-1){
perror("Erreur fork");
exit();
}
else if (p1==0) {
close(fd[0]);
dup2(fd[1],1);
execlp("ls","ls",argv[1],0);
}
p2=fork();
if (p2==-1){
perror("Erreur fork");
exit();
}
else if (p2==0){
close(fd[1]);
dup2(fd[0],0);
execlp("sort","-r",NULL);
}
waitpid(p1,nullptr,0);
close(fd[1]);
waitpid(p2,nullptr,0);
return 0;
}
// can you have a look at this and tell me if it would work?
推荐阅读
- swift - 如何确定当前视图控制器是否处于活动状态,如果处于活动状态则执行代码
- yarnpkg - 当你使用这个插件时,你必须安装`typescript`。错误
- excel - VBA 运行时错误 9:类似工作表转换为文本文件的下标超出范围
- mysql - MySQL 查询只有在使用 ORDER BY 字段 DESC 和 LIMIT 时才慢
- php - 为什么每当我想创建一个新的 laravel 项目时都会出错?
- django - 如何在 django 中添加谷歌地图,从用户那里获取位置和他想要的位置,然后计算位置之间的距离?
- spring - 为什么即使我已将目录名称固定为韩语的英文,log4j 仍无法解析 url
- windows - 将多行存储在一个变量中
- javascript - 获取方法不在浏览器上显示数据并在邮递员上显示错误
- faunadb - 如何在 FaunaDB 中选择一个日期字段在另一个日期字段之后的所有文档