使用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
相关产品推荐
相关产品推荐

