Linux C编程--popen函数详解

1 篇文章 0 订阅

Linux C popen()函数详解

表头文件

#include<stdio.h>

定义函数

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

函数说明

popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令。参数type可使用“r”代表读取,“w”代表写入。依照此type值,popen()会建立管道连到子进程的标准输出设备或标准输入设备,然后返回一个文件指针。随后进程便可利用此文件指针来读取子进程的输出设备或是写入到子进程的标准输入设备中。此外,所有使用文件指针(FILE*)操作的函数也都可以使用,除了fclose()以外。

  • 如果 type 为 r,那么调用进程读进 command 的标准输出。
  • 如果 type 为 w,那么调用进程写到 command 的标准输入。

返回值

若成功则返回文件指针,否则返回NULL,错误原因存于errno中。

错误代码

EINVAL参数type不合法。

注意事项

在编写具SUID/SGID权限的程序时请尽量避免使用popen(),popen()会继承环境变量,通过环境变量可能会造成系统安全的问题。

范例

1

2

3

4

5

6

7

8

9

10

11

#include<stdio.h>

 

main()

{

    FILE *fp;

    char buffer[80];

    fp = popen("cat /etc/passwd""r");

    fgets(buffer, sizeof(buffer), fp);

    printf("%s", buffer);

    pclose(fp);

}

执行

root :x:0 0: root: /root: /bin/bash

测试:

linux环境

void
get_Ip (char **localIp)
{
  FILE *fpIp;
  *localIp = (char *) malloc (N * sizeof (char));
  memset (*localIp, 0, N * sizeof (char));
  system ("ifconfig | grep 'inet addr:'| grep -v '127.0.0.1'| cut -d: -f 2 | awk '{print $1}' > /dev/shm/get_ip.txt");
  fpIp = popen ("grep -Ff /dev/shm/get_ip.txt /etc/hosts.d/tcfs.hosts | awk '{print $1}'", "r");
  fread (*localIp, N * sizeof (char), sizeof (*localIp), fpIp);
  pclose (fpIp);
  free (*localIp);
}

转载:https://www.cnblogs.com/52php/p/5722238.html

参考:

Linux C编程--popen函数详解 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值