execvp系统调用执行ping命令时传入参数未生效问题求助
问题原因
execvp传入的参数数组要求第一个元素是要执行的程序自身名称,从第二个元素开始才是传给程序的实际参数,最后以NULL结尾。
你当前的参数列表里第一个元素直接填了目标网址,ping程序读取参数时会把第一个参数当作自身名称,后续没有读到有效的目标地址参数,因此输出用法报错。
修复方案
给参数数组第一个位置加上程序名"ping"即可,修正后的代码如下:
#include <iostream> #include <vector> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> using namespace std; int main(int argc, char *argv[]){ vector<char*> pingArgs; // 第一个参数必须是程序自身名称 pingArgs.push_back("ping"); pingArgs.push_back("www.google.com"); pingArgs.push_back(NULL); execvp("ping", &pingArgs[0]); // execvp调用成功的话不会走到这里,只有出错才会执行后续代码,加错误打印方便排查 perror("execvp执行失败"); return 0; }
补充说明
如果execvp调用成功,后续的代码逻辑不会被执行,只有调用出错时才会返回。建议保留perror打印错误信息,方便排查权限缺失、程序不存在等异常场景。
内容的提问来源于stack exchange,提问作者Adam Lee
相关产品推荐
相关产品推荐

