Linux下C语言进程编程问题:execlp调用加法程序失败排查
问题分析与解决
你的代码存在两个关键问题,直接导致了执行失败:
1. 语法错误引发的异常
在recouvre程序的参数检查代码中,printf语句里的argv[0]0是明显的语法错误——多写了一个多余的0,正确写法应为argv[0]。这个错误会导致编译失败,或运行时出现未定义行为。
修正后的参数检查代码:
if (argc != 4) { printf("usage: %s <nom_du_programme_calcul> <operande_1> <operande_2>\n", argv[0]); exit(10); }
2. execlp的路径查找问题
execlp函数会在PATH环境变量指定的目录中搜索要执行的程序。当你执行./recouvre calcul 2 3时,argv[1]的值是calcul,如果当前工作目录(.)不在你的PATH环境变量中,系统就找不到当前目录下的calcul程序,导致execlp调用失败,进而触发后续的错误提示。
解决这个问题有两种实用方式:
方式一:指定程序的相对/绝对路径
修改execlp的第一个参数为./calcul(如果两个程序在同一目录),或者直接传入完整绝对路径;也可以在执行命令时显式指定路径:./recouvre ./calcul 2 3。
修正后的execlp调用示例:execlp("./calcul", argv[1], argv[2], argv[3], NULL);方式二:将当前目录加入PATH
执行程序前先运行export PATH=$PATH:.,把当前目录添加到环境变量中,这样execlp就能找到当前目录下的calcul。
额外建议:在execlp失败后添加perror打印详细错误信息,能更直观定位问题(比如文件不存在、权限不足等):
execlp(argv[1], argv[1], argv[2], argv[3], NULL); perror("execlp 调用失败"); printf("Recouvrement du code de %s impossible...", argv[1]); exit(15);
内容的提问来源于stack exchange,提问作者fabrice
相关产品推荐
相关产品推荐

