zoukankan      html  css  js  c++  java
  • Linux下C编程,进程通信之标准流管道通信(即系统调用)

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

    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,并输入了指定的数据)

  • 相关阅读:
    Linux命令应用大词典-第11章 Shell编程
    Kubernetes 学习12 kubernetes 存储卷
    linux dd命令
    Kubernetes 学习11 kubernetes ingress及ingress controller
    Kubernetes 学习10 Service资源
    Kubernetes 学习9 Pod控制器
    Kubernetes 学习8 Pod控制器
    Kubernetes 学习7 Pod控制器应用进阶2
    Kubernetes 学习6 Pod控制器应用进阶
    Kubernetes 学习5 kubernetes资源清单定义入门
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2989852.html
Copyright © 2011-2022 走看看