在编写Linux程序的时候,在程序内部有些时候会涉及执行一些命令行内容,如ls,cat等命令,执行该命令当然也有的时候需要得到返回内容,如执行ls命令时需要返回当前目录的内容。那么如何操作呢?
答案是popen,通过popen创建一个管道,再执行相关的命令时候通过读取返回文件句柄就可以查看获取到的返回内容了。代码如下:
/************************************************************************* > File Name: popen_test.c > Author: huangweichao > Mail: me@huangea.com > Created Time: Wed 02 May 2018 05:15:32 PM CST ************************************************************************/ #include#include #include int main(int argc, const char * argv[]) { char sys_line[256]; char buf_ps[1024]; FILE * ptr; sprintf(sys_line, "ls -l"); printf("res[%d]:%s :\n",(int)strlen(buf_ps),sys_line); if((ptr=popen(sys_line, "r"))!=NULL) { rewind(ptr); while(!feof(ptr)) { fgets(buf_ps, 1024, ptr); printf("%s",buf_ps); } pclose(ptr); ptr = NULL; } else { printf("popen %s error\n", sys_line); return -1; } return 0; }
编译以上代码,执行可执行文件,获取到的返回结果打印出来如下:
root@ubuntu:~# ./a.out res[1]:ls -l : total 6541608 -rw-r--r-- 1 root root 562 May 2 17:13 a.c -rwxr-xr-x 1 root root 8976 May 2 17:15 a.out drwxr-xr-x 3 huangea huangea 4096 May 2 12:28 Desktop drwxr-xr-x 2 huangea huangea 4096 Mar 7 12:06 Documents drwxr-xr-x 2 huangea huangea 4096 Mar 7 12:06 Downloads -rw-r--r-- 1 huangea huangea 8980 Mar 7 11:44 examples.desktop drwxr-xr-x 2 huangea huangea 4096 Mar 7 12:06 Music drwxrwxr-x 13 root root 4096 Mar 8 10:39 opencv-3.4.0 -rw-r--r-- 1 root root 177152000 Mar 8 10:27 opencv-3.4.0.tar drwxr-xr-x 2 huangea huangea 4096 Mar 7 12:06 Pictures -rw-r--r-- 1 root root 766 May 2 17:15 popen_test.c drwxr-xr-x 2 huangea huangea 4096 Mar 7 12:06 Public drwxr-xr-x 4 root root 4096 Mar 9 09:35 robotleo drwxr-xr-x 2 huangea huangea 4096 Mar 7 12:06 Templates drwxrwxr-x 16 huangea huangea 4096 Mar 30 16:05 tina2.5 -rw-r--r-- 1 root root 6521346120 Nov 14 16:50 tina2.5.tgz -rw-r--r-- 1 root root 1290 Apr 25 10:53 usb.c -rw-r--r-- 1 root root 1616 Apr 20 17:18 usb.o -rwxr-xr-x 1 root root 8528 Apr 20 17:19 usbtest -rw-r--r-- 1 root root 19 May 2 16:52 val.txt drwxr-xr-x 2 huangea huangea 4096 Mar 7 12:06 Videos -rw-r--r-- 1 root root 4177 Jan 14 2017 vimrc.zip -rw-r--r-- 1 root root 4177 Jan 14 2017 vimrc.zip
相当精彩的博客,羡慕哦!