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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:06:01