Linux下C编程,进程通信之标准流管道通信(即系统调用)

简介: 1.概述   在编程的过程中总会需要使用系统调用,如linux下的ps,touch,rm,grep命令等;windows下的dir,mkdir,del命令等。   在linux中执行系统调用,通常使用标准流管道。

1.概述

  在编程的过程中总会需要使用系统调用,如linux下的ps,touch,rm,grep命令等;windows下的dir,mkdir,del命令等。

  在linux中执行系统调用,通常使用标准流管道

  标准流管道将一系列的创建过程合并到一个函数popen()中。poen完成的工作有以下几步:

  (1)创建一个管道。
  (2)fork一个子进程。
  (3)在父子进程中关闭不需要的文件描述符。
  (4)执行exec函数族调用。
  (5)执行函数中所指定的命令。

2.主要函数说明

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

  (1)command:指向的是一个以null结束符结尾的字符串,这个字符串包含一个shell命令,并被送到/bin/sh以-c参数执行,即由shell来执行。如:ps -ef | grep root

  (2)type:“r”,文件指针连接到command的标准输出,即该命令的结果产生输出;“w”:文件指针连接到command的标准输入,即该命令的结果产生输入

  (3)返回值文件描述符。当type='r',可以读取命令的执行结果;当type='w',可以给命令输入参数。

3.函数使用说明

3.1执行命令并读取执行结果

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<fcntl.h>
int main()
{
    FILE *fp;   ///文件指针
    char buf[1000]; ///缓冲区大小
    if((fp=popen("ps -ef | grep ^rte","r"))==NULL)  ///使用popen()函数,执行shell命令
        return 1;
    while((fgets(buf,1000,fp))!=NULL)   ///根据文件描述符读取命令的输出结果
        printf("%s",buf);
    pclose(fp); ///关闭文件描述符
    exit(0);
    return 0;
}

程序输出结果:

 3.2执行命令并输入参数

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<fcntl.h>
int main()
{
    FILE *fp;
    char *cmd="cat > aaa";   ///该命令新建一个文件,提示用户输入数据作为其内容
    char buf[1000]="ni hao wo de peng you!\n";  ///待输入的参数
    if((fp=popen(cmd,"w"))==NULL)
        return 1;
    fwrite(buf,sizeof(char),1000,fp);   ///通过文件描述符写入文件数据
    pclose(fp); ///关闭文件描述符
    exit(0);
    return 0;
}

 查看结果:(新建了文件aaa,并输入了指定的数据)

相关文章
|
1月前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
104 13
|
2月前
|
存储 Unix Linux
进程间通信方式-----管道通信
【10月更文挑战第29天】管道通信是一种重要的进程间通信机制,它为进程间的数据传输和同步提供了一种简单有效的方法。通过合理地使用管道通信,可以实现不同进程之间的协作,提高系统的整体性能和效率。
|
2月前
|
消息中间件 存储 供应链
进程间通信方式-----消息队列通信
【10月更文挑战第29天】消息队列通信是一种强大而灵活的进程间通信机制,它通过异步通信、解耦和缓冲等特性,为分布式系统和多进程应用提供了高效的通信方式。在实际应用中,需要根据具体的需求和场景,合理地选择和使用消息队列,以充分发挥其优势,同时注意其可能带来的复杂性和性能开销等问题。
|
2月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
4月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
3月前
|
存储 Python
Python中的多进程通信实践指南
Python中的多进程通信实践指南
40 0
|
2月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
213 8
|
2月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
851 6
|
2月前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
135 3
|
1月前
|
Linux Shell
Linux 10 个“who”命令示例
Linux 10 个“who”命令示例
80 14
Linux 10 个“who”命令示例