Linux系统编程实现ls -l | wc -l指令

news2024/11/15 10:35:34

        由于该指令是通过管道的形式实现的,所以我们要使用系统函数pipe。ls -l |wc -l的作用就是统计当前目录有多少文件。如果又父进程实现ls -l,子进程实现wc -l指令,代码如下:

#include<unistd.h>
#include<stdio.h>
#include<string.h>
#include<sys/wait.h>
int main()
{
    int pipefd[2]={0};
    if(pipe(pipefd)==-1)perror("创建管道失败");
    int pid=fork();
    if(pid==0)
    {
        close(pipefd[1]);
        dup2(pipefd[0],STDIN_FILENO);//将wc指令的输入文件描述符重定向为管道的读入端文件描述符
        execlp("wc","wc","-l",NULL);
        close(pipefd[0]);
    }
    else if(pid>0)
    {   
        close(pipefd[0]);//将读端关闭
        dup2(pipefd[1],STDOUT_FILENO);//将标准输入的文件描述符重定向为管道的写入端文件描述符
        execlp("ls","ls","-l",NULL);
        close(pipefd[1]);
    }
    else
    {
        perror("创建进程失败");
    }
    return 0;
}

 由于父子间通过管道实现,所以存在读写阻塞问题,不用担心僵尸进程的产生,所以可以不用调用wait函数回收子进程。

        运行结果如下: 

如果是兄弟进程实现上面的程序,代码如下

#include<unistd.h>
#include<stdio.h>
#include<string.h>
#include<sys/wait.h>
int main()
{
    int pipefd[2]={0};
    if(pipe(pipefd)==-1)perror("创建管道失败");
    int pid;
    int i=0;
    for(;i<2;i++)
    {
        if((pid=fork())==0)break;
    }
    if(i==0)
    {
        close(pipefd[1]);
        dup2(pipefd[0],STDIN_FILENO);//将wc指令的输入文件描述符重定向为管道的读入端文件描述符
        execlp("wc","wc","-l",NULL);
        close(pipefd[0]);
    }
    else if(i==1)
    {   
        close(pipefd[0]);//将读端关闭
        dup2(pipefd[1],STDOUT_FILENO);//将标准输入的文件描述符重定向为管道的写入端文件描述符
        execlp("ls","ls","-l",NULL);
        close(pipefd[1]);
    }
    else
    {
        close(pipefd[0]);
        close(pipefd[1]);
        //关闭父进程的读写端,保证兄弟进程间进行数据传输时,管道数据单向流通
        for(int i=0;i<2;i++)
        {
            wait(NULL);
        }
    }
    return 0;
}

 运行结果一样:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2111494.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

帝可得智能售货机运营管理系统

1.项目介绍 帝可得是一个基于物联网概念下的智能售货机运营管理系统 应用场景&#xff1a;智能家居、共享充电中、智能售货机 智能售货机的优势在于其自我管理能力 。 物联网技术&#xff1a;像是售货机的顺风耳和千里眼。 智能分析与推荐 人员设备绑定管理 移动支付支持…

下一代皮克斯:AI如何融合电影与游戏

故事是人类体验的核心,通过故事我们理解世界、寻找意义并与他人建立联系。技术的进步不断推动着故事叙述的形式,从迪士尼的多平面摄影机到皮克斯的3D图形技术,每一次技术革命都带来了故事叙述的新方式。 游戏:现代叙事的前沿 今天,有两个主要的趋势正在加速下一代叙事公…

球球大作战

代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdbool.h> #include<graphics.h> #include<stdlib.h> #include<conio.h> #include<time.h>//随机数库文件 #include<math.h> #include<tchar.h…

单点登录CAS

CAS&#xff08;Central Authentication Service&#xff09;是耶鲁大学发起的一个开源项目&#xff0c;旨在为Web应用系统提供一种可靠的单点登录解决方案。CAS服务器独立部署&#xff0c;作为独立的Web应用&#xff0c;负责处理用户的认证请求并颁发票据&#xff08;Ticket&a…

P0.7全倒装COB超微小间距LED显示屏厂家已量产,加速高清显示的发展

随着P0.7全倒装COB超微小间距LED显示屏技术的成功量产&#xff0c;这一里程碑式的成就不仅标志着高清显示技术迈入了全新纪元&#xff0c;更预示着未来视觉体验将迎来前所未有的变革。各大应用场景&#xff0c;如指挥中心、会议中心、大型活动直播、高端影院乃至家庭娱乐&#…

如何高效学习越南语,求方法,急!!!

高效学习越南语需要掌握基础语法和词汇&#xff0c;并通过将自己置于语言环境中来加强实际应用。与母语为越南语的人进行语言交换&#xff0c;利用语言学习应用&#xff0c;制定学习计划&#xff0c;以及进行阅读和写作练习都是提高语言能力的有效方法。同时&#xff0c;通过听…

【JavaSE基础】Java 基础知识

Java 转义字符 Java 常用的转义字符 在控制台&#xff0c;输入 tab 键&#xff0c;可以实现命令补全 转义字符含义作用\t制表符一个制表位&#xff0c;实现对齐的功能\n &#xff1a;换行符\n换行符一个换行符\r回车符一个回车键 System.out.println(“韩顺平教育\r 北京”);&…

C语言第一周课

目录 1.程序设计的基本概念是什么?C语言是什么?算法是什么? 2.开发环境 3.第一个C语言程序 4.搭建VC6编译环境 5.实际操作,完成第一个C语言程序 6.体验在线编译环境 1.程序设计的基本概念是什么?C语言是什么?算法是什么? C语言是一种较早的程序设计语言&#xff0c…

DORIS - DORIS行存编码格式JSONB

是什么&#xff1f; JSONB(JavaScript Object Notation Binary)是PostgreSQL、MySQL数据库中的一种数据类型&#xff0c;用于存储和查询JSON数据。它提供了在数据库中存储和操作JSON数据的能力&#xff0c;使得数据库能够更好地处理半结构化数据。JSONB是一种半结构化的数据雷…

Hive SQL基础语法及查询实践

目录 基础语法 1. 官网地址 2. 查询语句语法 基本查询&#xff08;Select…From&#xff09; 数据准备 &#xff08;0&#xff09;原始数据 &#xff08;1&#xff09;创建部门表 &#xff08;2&#xff09;创建员工表 &#xff08;3&#xff09;导入数据 全表和特定列查…

HNU-2023电路与电子学-实验1

写在前面&#xff1a; 这是电路与电子学课程的第一次实验&#xff0c;按照指导书的需求在Multisim软件搭建一个电路传感器模型&#xff0c;难度较小&#xff0c;细心完成就没有问题。 小tips&#xff1a;22级实验是采用上传到测试平台来进行功能检测&#xff0c;如果不通过则…

嵌入式s3c2240: ADC

ADC &#xff1a;模数转换 10 位 CMOS ADC &#xff08;模 / 数转换器&#xff09;是一个 8 通道模拟输入的再循环类型设备。其转换模拟输入信号为 10 位二进制数字编码&#xff0c;最大转换率为 2.5MHz A/D 转换器时钟下的 500 KSPS 。 模拟&#xff1a;连续信号 数字…

乘法问题c++

题目描述 小 A 最近刚刚学习了乘法&#xff0c;为了帮助他练习&#xff0c;我们给他若干个正整数&#xff0c;并要求他将这些数乘起来。 对于大部分题目&#xff0c;小 A 可以精准地算出答案&#xff0c;不过&#xff0c;如果这些数的乘积超过 &#xff0c;小 A 就不会做了。 …

MySQL学习--加强

流程控制函数 mysql表查询--加强 分页查询

5款ai智能改写工具,自动改写文章效率惊人

在这个信息迭代加速的时代&#xff0c;ai智能改写工具犹如一把魔法钥匙&#xff0c;轻轻一转&#xff0c;便能开启文章改写的大门。想象一下&#xff0c;那些曾经费尽心思打磨的文章&#xff0c;如今只需几秒钟&#xff0c;就能以全新的面貌示人&#xff0c;这不仅是一场效率的…

PDF样本图册转换为一个链接,随时打开无需印刷

想象一下&#xff0c;您手中有一本厚重的样本图册&#xff0c;里面包含了丰富多样的内容&#xff0c;如产品介绍、项目方案、学术论文等。在过去&#xff0c;您需要逐一翻阅、筛选&#xff0c;甚至为了便于查看&#xff0c;不得不将其印刷出来。如今&#xff0c;借助先进的数字…

python tkinter 文本类组件

Label组件 Label(win,text文本,justifycenter) win指定Label组件的父容器&#xff1b;text指定标签中的文本&#xff1b;justify指定标签中拥有多行文本时&#xff0c;最后一行文本的对齐方式。 from tkinter import * from PIL import Image,ImageTkroot Tk() root.title(…

栈 | 队列

系统栈主要保存以下内容&#xff1a; 1.局部变量&#xff0c;2.函数的形参和返回值 3.函数的调用关系 一、栈 1.基本概念 栈是一种特殊的线性表&#xff0c;具有线性结构。表尾为栈顶&#xff0c;表头为栈顶。遵循先进后出原则&#xff0c;只能在栈顶进行插入和删除操作。 …

KADAL | Kriging代理模型Python工具箱推荐

用于分析、设计优化和探索的Kriging工具箱 简介Required packagesQuick ExamplesContact特别感谢&#xff1a;参考资料 简介 用于分析、设计优化和探索的克里金法 (Kriging for Analysis, Design optimization, And expLoration, KADAL) 是由万隆理工学院 (Institut Teknologi…

Linux——解压大型zip文件报错:bad zipfile offset (local header sig) 的解决方法

一、现象描述 完整一行报错信息&#xff1a; error: invalid compressed data to inflate file #14: bad zipfile offset (local header sig) 二、解决办法 利用 -F 去修复&#xff1a; zip -F xxx.zip --out large.zip得到&#xff1a; 解压&#xff1a; unzip large.zi…