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

使用g_spawn_sync()执行cat /proc/cpuinfo报错求助

解决g_spawn_sync()执行cat /proc/cpuinfo报错的问题

嘿,我一眼就看到问题出在哪了——你传递命令参数的方式不对!

错误原因

你把整个命令"cat /proc/cpuinfo"作为单个元素放到argv数组里,但g_spawn_sync()的argv参数要求命令和参数必须分开存放:

  • 第一个元素是可执行程序的名字(比如"cat")
  • 后续元素是传给程序的独立参数(比如"/proc/cpuinfo")

当你把"cat /proc/cpuinfo"作为单个参数时,系统会把它当作一个完整的可执行文件名去PATH里查找,这显然找不到,所以才会返回No such file or directory错误。而单独执行ls或cat时,你只传了命令本身,没有参数,所以能正常工作。

修正后的代码

把argv拆分成命令和独立参数,就能正常运行了:

gchar *argv[] = { "cat", "/proc/cpuinfo", NULL }; 
char *output = NULL; // will contain command output 
GError *error = NULL; 
int exit_status = 0; 

if (!g_spawn_sync(NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, &output, NULL, &exit_status, &error)) { 
    printf("[getHardwareInfo] DEBUG: Error on g_spawn_sync %s.\n", error->message); 
}
// 记得用完后释放资源
if (output) g_free(output);
if (error) g_error_free(error);

额外提示

  • 你用到的G_SPAWN_SEARCH_PATH是正确的,它允许系统在PATH环境变量中查找cat,所以不需要写绝对路径/bin/cat。
  • 如果以后需要执行更复杂的shell命令(比如带管道、重定向的),可以考虑用g_spawn_command_line_sync(),它支持直接传入完整的shell命令字符串,但要注意安全问题(避免命令注入)。

内容的提问来源于stack exchange,提问作者Mark Sanchez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:12:11