C 运行系统命令并获得输出?

C 运行系统命令并获得输出?,c,linux,system,C,Linux,System,可能重复: 我想在linux中运行一个命令并获得它输出的文本,但我不想将此文本打印到屏幕上。有没有比创建临时文件更优雅的方法?您需要某种进程间通信。使用缓冲区或共享缓冲区 您需要“”函数。下面是一个运行命令“ls/etc”并输出到控制台的示例 #包括 #包括 int main(int argc,char*argv[]) { 文件*fp; 字符路径[1035]; /*打开命令进行读取*/ fp=popen(“/bin/ls/etc/”,“r”); 如果(fp==NULL){ printf(“无法

可能重复:


我想在linux中运行一个命令并获得它输出的文本,但我不想将此文本打印到屏幕上。有没有比创建临时文件更优雅的方法?

您需要某种进程间通信。使用缓冲区或共享缓冲区

您需要“”函数。下面是一个运行命令“ls/etc”并输出到控制台的示例

#包括
#包括
int main(int argc,char*argv[])
{
文件*fp;
字符路径[1035];
/*打开命令进行读取*/
fp=popen(“/bin/ls/etc/”,“r”);
如果(fp==NULL){
printf(“无法运行命令\n”);
出口(1);
}
/*一次读取一行输出-输出它*/
while(fgets(path,sizeof(path),fp)!=NULL){
printf(“%s”,路径);
}
/*接近*/
pclose(fp);
返回0;
}

将stderr重定向到stdout可能是个好主意,因此您可以捕获错误。如何将stderr重定向到stdout?您应该使用
fgets(path,sizeof(path),fp)
而不是
sizeof(path)-1
。阅读manual@jimi:您可以在通过popen运行的shell命令中将stderr重定向到stdout,例如fp=popen(“/bin/ls/etc/2>&1”,“r”);似乎有一个双向通信使用popen,如果我发出一个命令,提示用户确认,然后我得到提示。如果我只想读取输出,如果有提示,我可以做什么?然后我只是重复讨论exitAlready。标记为重复,但不要指向它。我认为这不是一个完美的解决方案。在你说是重复的同时,你应该给我们指出它。或者更好!!根据重复记录者的数量进行重定向。