popen、system

简介: 1、popen函数  popen()通过创建一个管道,调用 fork 产生一个子进程,执行一个 shell 以运行命令来开启一个进程。这个进程必须由 pclose() 函数关闭,而不是 fclose() 函数。

1、popen函数

 popen()通过创建一个管道,调用 fork 产生一个子进程,执行一个 shell 以运行命令来开启一个进程。
这个进程必须由 pclose() 函数关闭,而不是 fclose() 函数。

#include <stdio.h>
FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);

功能:执行shell命令,并读取此命令的返回值。
参数:command:一个指向以NULL结束的shell命令字符串的指针
      type:只能是读或写("r"或"w")
返回:如果调用fork()或pipe()失败,或者不能分配内存将返回NULL,否则返回标准I/O流



2、system函数

 system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程

#include <stdlib.h>
int system(const char *command);

函数:int system(const char *command)
功能:执行shell命令
参数:command:一个指向以NULL结束的shell命令字符串的指针
返回: -1 :fork()失败
    127 :exec()失败
   other:子shell的终止状态



3、例子

#include <stdio.h>
int main()
{
    FILE *fp   = NULL;
    char buf[100] = {0};
    fp = popen("cat /tmp/test", "r");
    if(NULL == fp)
    {
        printf("popen() erro!!!");
        return -1;
    }

    while(NULL != fgets(buf, sizeof(buf), fp))
    {
        printf("%s", buf);
    }

    pclose(fp);
    return 0;
}

fp = popen("date > /tmp/test", "w");
fwrite(buf, 1, sizeof(buf), fp);
目录
相关文章
|
机器学习/深度学习 监控 自动驾驶
深度学习中的2D目标检测
2D目标检测是深度学习中的一个关键任务,旨在识别图像中的目标对象,并在每个目标对象周围生成一个边界框。该任务在自动驾驶、视频监控、机器人视觉等领域具有广泛应用。
315 5
|
存储 分布式计算 IDE
Flink(十一)【状态管理】(4)
Flink(十一)【状态管理】
|
安全 Swift iOS开发
【Swift开发专栏】Swift基础语法详解
【4月更文挑战第30天】Swift是苹果2014年发布的编程语言,适用于iOS、macOS等多个平台。它比Objective-C更安全、现代、易学。本文主要介绍Swift基础:常量变量(`let`和`var`),数据类型(整数、浮点数、布尔、字符串),元组,可选类型(Optional)。此外,还涉及运算符(算术、比较、逻辑)、控制流(`if`、`for`、`while`、`switch`)以及函数和闭包的使用。通过这些基础知识的学习,可以帮助初学者快速上手Swift。
325 1
|
开发工具 git
NotionNext 笔记博客部署 图文教程①
如何使用NotionNext工具将Notion笔记实时渲染成静态博客网站,从创建Notion账号、复制模板、获取页面ID、复制源代码到Vercel部署的完整步骤。
NotionNext 笔记博客部署 图文教程①
|
存储 Java Spring
SpringBoot2 | 条件注解 @ConditionalOnBean 原理源码分析(七)
SpringBoot2 | 条件注解 @ConditionalOnBean 原理源码分析(七)
249 0
|
消息中间件 Linux
mq报错abbit@syld36: * connected to epmd (port 4369) on syld36 * epmd reports node ‘rabbit‘ uses po
mq报错abbit@syld36: * connected to epmd (port 4369) on syld36 * epmd reports node ‘rabbit‘ uses po
282 0
|
SQL 消息中间件 关系型数据库
Flink报错问题之cdc任务报错如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
数据采集
指标体系构建-02-从0开始,梳理数据指标体系
指标体系构建-02-从0开始,梳理数据指标体系
|
SQL 存储 关系型数据库
大数据Hive拉链表的设计与实现
大数据Hive拉链表的设计与实现
515 2