You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu Linux C编程使用dup2实现多管道时grep报错问题求助

问题定位与修复

核心错误点

  • 第三段fork生成的wc子进程中,execvp 调用传参错误:你传入了grep对应的参数数组cmd2,而非wc对应的参数数组cmd3。

报错原因说明

execvp的第二个参数是目标进程的完整argv数组,数组第一个元素对应进程的argv[0](也就是程序报错时默认输出的程序名)。当你误传入cmd2时,wc进程的argv[0]被设置为"grep",argv[1]是"c",wc会尝试把"c"作为输入文件打开,找不到对应文件就会输出带有"grep"前缀的报错,和你遇到的错误提示完全匹配。

修复方法

将第三段子进程中的execvp调用参数修改即可:

// 原错误代码
// if(execvp("wc",cmd2) < 0)
// 修复后代码
if(execvp("wc",cmd3) < 0)

额外优化建议

  • 可以给pipe、fork系统调用添加错误判断逻辑,避免系统资源不足时出现未定义行为
  • 建议使用waitpid替代wait,更精准的等待对应子进程退出

内容的提问来源于stack exchange,提问作者Mr Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:51:00