linux下C和shell调用的popen函数

说明:

本文介绍popen函数的使用方法和行为机理,并给出实际的例子来辅助说明了popen函数的使用方法。

popen函数使用FIFO管道执行外部程序,首先让我们看看popen的函数原型吧:

#include <stdio.h>

FILE *popen(const char *command, const char *type);

int pclose(FILE *stream);

popen 通过type是r 还是w 来确定command的输入/输出方向,r和w是相对command的管道而言的。r表示command从管道中读入,w表示 command通过管道输出到它的stdout,popen返回FIFO管道的文件流指针。pclose则用于使用结束后关闭这个指针。

下面一起来看一个例子:

/*******************************************************************************************

** Name:popen.c

**      This program is used to show the usage of popen() .

*******************************************************************************************/

#include <sys/types.h>

#include <unistd.h>

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

int main( void )

{

FILE   *stream;

FILE   *wstream;

char   buf[1024];

memset( buf, ‘\0‘, sizeof(buf) );//初始化buf,以免后面写如乱码到文件中

stream = popen( "ls -l", "r" ); //将“ls -l”命令的输出 通过管道读取(“r”参数)到FILE* stream

wstream = fopen( "test_popen.txt", "w+"); //新建一个可写的文件

fread( buf, sizeof(char), sizeof(buf), stream); //将刚刚FILE* stream的数据流读取到buf中

fwrite( buf, 1, sizeof(buf), wstream );//将buf中的数据写到FILE    *wstream对应的流中,也是写到文件中

pclose( stream );

fclose( wstream );

return 0;

}

[[email protected] src]# gcc popen.c

[[email protected] src]# ./a.out

[[email protected] src]# cat test_popen.txt

总计 128

-rwxr-xr-x 1 root root 5558 09-30 11:51 a.out

-rwxr-xr-x 1 root root 542 09-30 00:00 child_fork.c

-rwxr-xr-x 1 root root 480 09-30 00:13 execve.c

-rwxr-xr-x 1 root root 1811 09-29 21:33 fork.c

-rwxr-xr-x 1 root root 162 09-29 18:54 getpid.c

-rwxr-xr-x 1 root root 1105 09-30 11:49 popen.c

-rwxr-xr-x 1 root root 443 09-30 00:55 system.c

-rwxr-xr-x 1 root root    0 09-30 11:51 test_popen.txt

-rwxr-xr-x 1 root root 4094 09-30 11:39 test.txt

时间: 2024-11-08 21:46:48

linux下C和shell调用的popen函数的相关文章

Linux下C/C++代码调用PHP代码

Linux下C/C++代码可以通过popen系统函数调用PHP代码并通过fgets函数获取PHP代码echo输出的字符串. //main.c char str[1024] = {0}; char * cmd = "php /src/test/c.php 1234"; FILE * stream = NULL; if ((stream = popen(cmd, "r")) == NULL){//通过popen执行PHP代码 return ""; }

二十七、Linux下常用的shell命令记录

本文章记录我在linux系统下常用或有用的系统级命令,包括软硬件查看.修改命令,有CPU.内存.硬盘.网络.系统管理等命令.但本文不打算介绍生僻命令,也不介绍各个linux发行版下的特有命令,且以后会持续更新. 说明,我是在一个Centos 6.4 64位的虚拟机系统进行测试.本文介绍的命令都会在此Centos下运行验证(也有部分命令会在我的suse/ubuntu系统里测试的,会做特明说明),但运行结果就不再列出了. 硬件篇 CPU相关 lscpu #查看的是cpu的统计信息. cat /pro

Linux下手动获取当前调用栈

被问到如何手动获取当前的调用栈,之前碰到过一时没记起来,现在回头整理一下. 其原理是:使用backtrace()从栈中获取当前调用各层函数调用的返回地址,backtrace_symbols()将对应地址翻译成对应的符号信息,这两个函数在execinfo.h中声明.详细用法见后面的example.这里强调几处需要注意的地方,在man里头也有说明 1,inline函数无返回地址,因此在结果中不显示 2,需要给linker指定对应的参数,才能保证有对应的符号名称信息,GNU工具链是指定-rdynami

linux下Tab及shell vim补全python

linux下Tab及shell 补全python - Meets - 博客园https://www.cnblogs.com/guobaoyuan/p/8276141.html Vim 中如何对 Python 进行代码补全? - 知乎https://www.zhihu.com/question/20371683 wklken/k-vim: vim配置https://github.com/wklken/k-vim 在vim增加对python的自动补全 - CSDN博客https://blog.csd

Linux下c基于openssl生成MD5的函数

Linux下openssl提供了一系列哈希及加密的函数,如果调用openssl提供的MD5函数生成任意字符串的MD5呢?下面提供了一段代码实现Linux下c字符串生成md5的函数. 具体代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #include "stdio.h" #include <string.h> #include <stdlib.h&

Linux下gcc编译控制动态库导出函数小结

Linux下gcc编译控制动态库导出函数小结 来源 https://www.cnblogs.com/lidabo/p/5703890.html 根据说明文档“How To Write Shared Libraries"介绍, 有四种方法: 1. 在方法声明定义时,加修饰:__attribute__((visibility("hidden"))) 就是说将不公开的函数都加上这个属性,没加的就是可见的 2. gcc 在链接时设置 -fvisibility=hidden,则不加 v

Linux下高效编写Shell——shell特殊字符汇总

Linux下无论如何都是要用到shell命令的,在Shell的实际使用中,有编程经验的很容易上手,但稍微有难度的是shell里面的那些个符号,各种特殊的符号在我们编写Shell脚本的时候如果能够用的好,往往能给我们起到事半功倍的效果,为此,特地将Shell里面的一些符号说明罗列成对照表的形式,以便快速的查找.看看你知道下表中哦你的哪些Shell符号呢? Shell符号及各种解释对照表: Shell符号 使用方法及说明 # 注释符号(Hashmark[Comments]) 1.在shell文件的行

Linux下常用的shell命令记录1

 硬件篇 CPU相关 lscpu #查看的是cpu的统计信息. cat /proc/cpuinfo #查看CPU信息详细信息,如每个CPU的型号,主频等 内存相关 free -m #概要查看内存情况 这里的单位是MB cat /proc/meminfo #查看内存详细信息 磁盘相关 lsblk #查看硬盘和分区分布,显示很直观 df -h #查看各分区使用情况 cat /proc/partitions #查看硬盘和分区 mount | column -t #查看挂接的分区状态 网卡相关 lspc

Linux下如何执行Shell脚本

Linux下你可以有两种方式执行Shell脚本: 1.用shell程序执行脚本:根据你的shell脚本的类型,选择shell程序,常用的有sh,bash,tcsh等(一般来说第一行#!/bin/bash里面指明了shell类型的,比如#!/bin/bash指明是bash,#!/bin/sh则是sh):然后输入命令(其中bash为shell的名称,myshell.sh则为你要执行的代码): bash myshell.sh 2.直接执行脚本: 不过首先的加上可执行权限(也许要root权限,4情况而定