进程间的通信----管道

前提:本文是基于Linux系统下的学习

用户态的进程是如何组织的呢?
所有的用户态进构成了一棵树。进程树。

进程树的树根是init.也就是1号进程。是用户态进程的祖宗进程。
如何查看进程树?
pstree

进程之间的关系 父子进程和兄弟进程
查看进程的信息
ps -aux
实时查看进程的使用情况 top

如何创建一个进程?
fork(2) 可以创建一个子进程。
#include <unistd.h>
pid_t fork(void);
功能:创建一个子进程。函数的调用者是父进程,新创建的进程是子进程
参数:void
返回值:
成功 父进程中返回子进程的pid
子进程中返回0
失败 父进程中返回-1. errno被设置
子进程创建失败

 


进程的终止
   return和exit(3)

return 只是从函数调用中返回。结束了函数的执行。在main函数中返回,并没有结束进程

exit(3) 这个函数被调用的时候,结束当前进程。

 

无名管道和有名管道

无名管道--应用于具有亲属关系的进程间通信

pipe(2)    创建无名管道

  pipefd[0] 指向读端;pipefd[1]指向写端

 1 //无名管道必须是带有亲属关系的 父子or兄弟
 2 //无名管道实现进程间通信
 3 #include <stdio.h>
 4 #include <unistd.h>
 5 #include <string.h>
 6 #include <stdlib.h>
 7 int main(){
 8     char buf[128];
 9     char* msg="hello,father\n";
10     int pfd[2];
11     //创建无名管道
12     int p=pipe(pfd);//pfd[0] read;  pfd[1]  write
13     if(p==-1){
14         perror("pipe");
15         return -1;
16     }
17     //创建子进程
18     pid_t pid=fork();
19     if(pid==-1){
20         perror("fork");
21         return -1;
22     }
23     if(pid==0){//son
24         close(pfd[0]);//关闭读
25         write(pfd[1],msg,strlen(msg));
26         close(pfd[1]);
27         exit(0);
28     }
29     else{//father
30         close(pfd[1]);
31         int r=read(pfd[0],buf,128);
32         write(1,buf,r);
33         close(pfd[0]);
34         wait(NULL);
35     }
36     return 0;
37 }

 

有名管道:其实就是一个文件,这个文件没有内容,只是起到一个桥梁的作用

mkfifo(3)

 1 //mkfifo.c
 2 //创建管道文件
 3 #include <stdio.h>
 4 #include <sys/types.h>
 5 #include <sys/stat.h>
 6 
 7 int main(int argc,char* argv[]){
 8     int mk=mkfifo(argv[1],0644);
 9     if(mk==-1){
10         perror("mkfifo");
11         return -1;
12     }
13     return 0;
14 }
//fifo_w.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
int main(int argc,char* argv[]){char* msg="hello.read\n";//打开管道文件int fd=open(argv[1],O_WRONLY);if(fd==-1){perror("open");return -1;}//向管道文件中写
    write(fd,msg,strlen(msg));close(fd);return 0;
}
 1 //fifo_r.c
 2 #include <stdio.h>
 3 #include <sys/types.h>
 4 #include <sys/stat.h>
 5 #include <fcntl.h>
 6 
 7 int main(int argc, char* argv[]){
 8     char buf[128];
 9     int fd=open(argv[1],O_RDONLY);
10     if(fd==-1){
11         perror("open");
12         return -1;
13     }
14     int r=read(fd,buf,128);
15     write(1,buf,r);
16     close(fd);
17     return 0;
18 }

 

转载于:https://www.cnblogs.com/qiuyuwutong/p/9350020.html

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

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

相关文章

web项目启动时,自动执行代码的几种方式

在项目开发过程中&#xff0c;往往需要一些功能随着项目启动而优先启动&#xff0c;下面我总结几种方式&#xff08;非spring boot&#xff09; spring boot的参考 spring boot 学习之路9 (项目启动后就执行特定方法) 方式一&#xff1a; ServletContextListener监听器&#…

设计模式:状态

本文将介绍状态设计模式 。 它是行为设计模式之一 。 您无需了解许多理论即可了解模式的主要概念。 该文章将分为几个部分&#xff0c;在其中我将提供有关需要应用该模式的情况&#xff0c;它所具有的利弊以及用法示例的信息。 有时&#xff0c;当对象的内部状态更改时&#…

Linux内核锁实现原理,linux 大内核锁原理

大内核锁(BKL)的设计是在kernel hacker们对多处理器的同步还没有十足把握时&#xff0c;引入的大粒度锁。他的设计思想是&#xff0c;一旦某个内核路径获取了这把锁&#xff0c;那么其他所有的内核路径都不能再获取到这把锁。自旋锁加锁的对象一般是一个全局变量&#xff0c;大…

Sass学习日志

一、什么是SASS SASS是一中CSS的开发工具&#xff0c;提供了许多便利的写法&#xff0c;大大节约了设计者们的时间&#xff0c;使得CSS的开发&#xff0c;变得简单和可维护。本文总结了SASS的主要方法。我们的目标是&#xff0c;有了这篇文章&#xff0c;日常的一般使用就不需…

ptyhon中文本挖掘精简版

import xlrd import jieba import sys import importlib import os #python内置的包&#xff0c;用于进行文件目录操作&#xff0c;我们将会用到os.listdir函数 import pickle #导入cPickle包并且取一个别名pickle #持久化类 import random import numpy as np …

[UWP]了解模板化控件(9):UI指南

[UWP]了解模板化控件(9)&#xff1a;UI指南 原文:[UWP]了解模板化控件(9)&#xff1a;UI指南1. 使用TemplateSettings统一外观 TemplateSettings提供一组只读属性&#xff0c;用于在新建ControlTemplate时使用这些约定的属性。 譬如&#xff0c;修改HeaderedContentControl的Co…

Java的反射API

如果您曾经问​​过自己以下问题&#xff1a; –“如何在字符串中仅包含其名称的方法调用&#xff1f;” –“如何动态列出类中的所有属性&#xff1f;” –“如何编写一种将任何给定对象的状态重置为默认值的方法&#xff1f;” 然后您可能已经听说过Java的Reflection API…

linux服务器基本常识,服务器搭建-Linux基础知识

服务器搭建还是需要一些Linux知识的&#xff0c;这节就聊点基础的。文件权限操作查看权限Linux中每个文件对每个用户来说都有对应的权限&#xff0c;在任一路径中输入ll就可以查看这些信息&#xff1a;rootip-*** /usr/local # lltotal 32Kdrwxr-xr-x 2 root root 4.0K Jan 14 …

mysql基本命令入门

背景 作为一个前端&#xff0c;重新学习后台相关知识&#xff0c;记录下自己遇到及用到的命令及爬坑经验。 基本命令 1.创建数据库 create database 数据库名称 eg: create database test //创建一个名为test的数据库 2.查看所有数据库 show databases 3.选择某一个数据库 use …

不完善迷你计算器

html代码&#xff1a; <!DOCTYPE html PUBspanC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml"><head><meta http-e…

LINQ和Java

LINQ已经非常成功&#xff0c;但在.NET生态系统中也引起了争议。 许多人正在Java世界中寻找可比的解决方案。 为了更好地理解什么是可比的解决方案&#xff0c;让我们看一下LINQ解决的主要问题&#xff1a; 查询语言通常是具有许多关键字的声明性编程语言。 它们提供的控制流元…

怎样 测试 某个 端口 是否打开

我们一般最常见的工具是telnet&#xff0c;但是telnet使用的是tcp协议&#xff0c;换句话说telnet只能检测tcp的这个端口打开了没。 方法很简单&#xff0c;假设我们要看192.192.193.211这个IP的tcp 22端口是否打开&#xff0c;则运行telnet 192.192.193.211 22 来查看 如果cen…

linux用户空间注册按键事件,linux下获取按键响应事件

1、问题通过一个死循环将读取键盘对应的设备文件将触发键盘事件在屏幕上打印出来&#xff0c;按esc退出程序代码是在unbuntu10.04编译执行通过的2、input_event描述在Linux内核中&#xff0c;input设备用input_dev结构体描述&#xff0c;使用input子系统实现输入设备驱动的时候…

CSS实现单行与多行文字省略(truncation)

在上一篇文章小div布局之卡片堆叠&#xff08;card-stacking&#xff09;中有多行文字溢出省略的效果&#xff0c;这篇文章就对这种效果&#xff08;包括单行文字溢出省略&#xff09;的实现做个简单的记录&#xff0c;以防自己忘记。具体来说&#xff0c;就是要实现这种文字排…

位运算的使用例子

class Data { public:enum Permission{allowSelect 1 << 0,allowUpdate 1 << 1,allowInsert 1 << 2,allowDelete 1 << 3}; public:Data():flag(0){};~Data(){};/*添加某权限*/void enable(int permission){flag | permission;}/*删除某权限*/void…

事务性Lucene

许多用户不喜欢Lucene API的事务性语义&#xff0c;以及这在搜索应用程序中如何有用。 首先&#xff0c;Lucene实现了ACID属性&#xff1a; 一个 tomicity&#xff1a;当您在更改&#xff08;添加&#xff0c;删除文件&#xff09; IndexWriter会话&#xff0c;然后提交&#…

logback配置详解和使用

最近知道一种打印日志的新方法&#xff0c;在此做一下学习总结。 转自&#xff1a;行走在云端的愚公 https://www.cnblogs.com/warking/p/5710303.html 一、logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站&#xff1a; http://logback.qos.ch。它当前…

linux下iostat命令无效,linux iostat命令详解

iostatiostat用于输出CPU和磁盘I/O相关的统计信息.命令格式:iostat [ -c | -d ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ device [ ... ] | ALL ] [ -p [ device | ALL ] ][ interval [ count ] ]1)iostat的简单使用iostat可以显示CPU和I/O系统的负载情况及分区状态信息.直接执行i…

css样式表

样式表&#xff1a; 一。内联&#xff1a;写在body中 直接在内容的标签中添加style属性&#xff1a;例如<div style"...">1234</div> 二。内嵌&#xff1a;写在head中 一般写在标题标签的后面&#xff0c;添加<style type"text/css"&g…

RAID技术超详细讲解

RAID 技术是一种多磁盘技术&#xff0c;面对数据的各方面有着两面性的影响&#xff0c;整体来说优点大于缺点的&#xff0c;下面我将详细介绍一下 RAID &#xff0c;简称磁盘阵列技术。 一、RAID 概述 1988 年美国加州大学伯克利分校的 D. A. Patterson 教授等首次在论文 “A C…