如何在C中执行命令并读取其输出
我想使用以下命令查找路径名:如何在C中执行命令并读取其输出,c,unix,system,execv,C,Unix,System,Execv,我想使用以下命令查找路径名: system("which"); 然后我使用输出作为execv()函数的参数。我该怎么做?有什么建议吗 您试图以错误的方式解决它它使用路径变量来定位给定的可执行文件。使用which获取路径,然后将其传递给execv()是不必要的,因为exec*还有另一个变体,它的作用相同: 要读取命令的输出,可以使用: #包括 #包括 字符str[LINE_MAX]; FILE*fp=popen(“哪个ls”、“r”); 如果(fp==NULL){ /*错误*/ } if(fg
system("which");
然后我使用输出作为
execv()
函数的参数。我该怎么做?有什么建议吗 您试图以错误的方式解决它它使用路径
变量来定位给定的可执行文件。使用which
获取路径,然后将其传递给execv()
是不必要的,因为exec*
还有另一个变体,它的作用相同:
要读取命令的输出,可以使用:
#包括
#包括
字符str[LINE_MAX];
FILE*fp=popen(“哪个ls”、“r”);
如果(fp==NULL){
/*错误*/
}
if(fgets(str,sizeof str,fp)==NULL){
/*错误*/
}
/*删除尾随的换行符(如果有)*/
char*p=strchr(str,'\n');
如果(p)*p=0;
如果您的二进制文件在某个缓冲区中,那么您可以使用snprintf()
来形成popen()
的第一个参数,不要使用system
而是popen
。但是我必须使用system@Jean-BaptisteYunèsy您无法轻松获得system
运行的命令在输出时产生的内容,这并不是用于此目的。为什么要用这种方式定位it?让execvp
为您完成这项工作……您可以解析env路径,而不是使用which
。使用strtok()
,获取每个路径,并检查从path
提取的每个路径中是否存在命令。或者使用execvpe()
,execle()
并传递环境,其中包括PATH
。这是一个编程助手,我必须使用which和execv()Hmm。如果你真的想这样做,你可以使用popen()
和fgets()
@esrtr-如果你坚持使用system()
和其中的,必须在子进程和父进程之间创建管道。将子进程的stdout
设置为管道的写入端。在父进程上,从管道读取以获得哪个cmd
的输出。现在,通过这个输出,您可以调用execvp()
。我可以使用system()。不是popen()。我该怎么做?可能吗@l3x@esrtr你的要求不同寻常<代码>系统()。你可以照阿尔维茨的建议去做。
#include <limits.h>
#include <stdio.h>
char str[LINE_MAX];
FILE *fp = popen("which ls", "r");
if (fp == NULL) {
/* error */
}
if(fgets(str, sizeof str, fp) == NULL) {
/* error */
}
/*remove the trailing newline, if any */
char *p = strchr(str, '\n');
if (p) *p = 0;