文档章节

Head First C 学习日志 第十章 进程间通信 输入输出重定向

AlexTuan
 AlexTuan
发布于 2016/04/09 20:25
字数 650
阅读 61
收藏 2

Head First C 第十章 进程间通信

创建进程只是个开始 如果你想控制运行中的进程,向进程发送数据读取它的输出,该怎么办?通过进程间通信,进程可以合力完成某件工作。

进程内部一瞥

进程含有它正在运行的程序,还有栈和堆数据空间。除此之外,进程还需要记录数据流的连向,比如标准输出连到了哪里(默认是屏幕btw)。进程用文件描述符表示数据流,所谓文件描述符其实就是一个数字。

  • 文件描述符是一个数字,它代表一条数据流。
  1. 一个标准进程
数据流 含义
0 键盘 标准输入
1 屏幕 标准输出
2 屏幕 标准错误
3 数据库连接 其它形式的数据流

创建进程以后,标准输入连到键盘,标准输出和标准错误都连接到屏幕。它们会保持这样的连接,直到有人把它们重定向到了其他地方。

  • 文件描述符描述的不一定是文件。

重定向即替换数据流。

进程可以重定向自己

到目前为止,我们只用> <重定向过程序,但只要修改描述符表,进程也能重定向他们自己。 > - ./myprog >output.txt 2>error.log > - 2> 表示将标准错误重定向。 > - ./myprog 2>&1表示将标准错误重定向到标准输出

  1. fileno()返回描述符号 每打开一个文件,操作系统都会在描述符表中新注册一项。假设打开了某个文件: FILE *my_file = fopen("guitar.mp3","r"); 操作系统会打开guitar.mp3文件,然后返回一个指向它的指针,操作系统还会遍历描述符表寻找空项,把新文件注册在其中。 | # | 数据流 |含义| | :-------- | --------:| ---:| | 0 | 键盘 |标准输入| | 1 | 屏幕 |标准输出| | 2 | 屏幕 |标准错误| | 3 | 数据库连接 |其它形式的数据流| | 4 | guitar.mp3 |其它形式的数据流| 调用fileno()就可以根据文件指针知道它是几号文件描述符。
  2. dup2()复制数据流 dup是duplicate的缩写,举例说明dup2的用法: dup2(4,3):将3号文件描述符指向4号文件描述符指向的数据流
代码

sample

© 著作权归作者所有

AlexTuan
粉丝 4
博文 27
码字总数 17966
作品 0
程序员
私信 提问
Head First C 第十章 进程间通信 创建管道

Head First C 第十章 进程间通信 创建管道 我们已经可以通过重定向的方式,将子进程的输出重定向到文件,但我们想从进程中直接读取数据,如何使实现。 用管道连接进程 我们曾经用一个命令来连...

AlexTuan
2016/04/10
66
0
Head First C 学习日志 第十章 进程间通信 捕捉信号

Head First C 第十章 进程间通信 捕捉信号 关于信号 信号是操作系统控制程序的方式,举个栗子,操作系统在看到用户输入了Ctrl+C时,就会向程序发送中断信号。信号映射表 | 信号 | 处理函数 ...

AlexTuan
2016/04/17
32
0
Head First C 第十章 进程间通信 闹钟

Head First C 第十章 进程间通信 闹钟 主要介绍一个函数,,的作用是:接收一个无符号整型参数,作为定时的秒数,系统会计时,时刻到达时,给进程发送一个SIGALRM的信号。 关于alarm() 注意 ...

AlexTuan
2016/04/17
40
0
swoole 1.7.3 发布,增加PHP多进程管理模块

swoole 1.7.3 发布,PHP的异步并行扩展swoole,最近增加了多进程管理模块swoole_process,用来替代PHP的pcntl扩展。 PHP自带的pcntl,存在很多不足,如 pcntl无法用在fpm/apache中 pcntl没有...

matyhtf
2014/06/20
10K
13
MoreWindows博客目录(微软最有价值专家,原创技术文章152篇)

为了方便大家查找和学习,现将本人博客中所有博客文章列出目录。 一. 白话经典算法 目前有17篇,分为七大排序和经典面试题讲解两大类 1. 《白话经典算法系列之一 冒泡排序的三种实现》 2. 《...

morewindows
2013/12/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Docker常用命令小记

除了基本的<font color="blue">docker pull</font>、<font color="blue">docker image</font>、<font color="blue">docker ps</font>,还有一些命令及参数也很重要,在此记录下来避免遗忘。 ......

程序员欣宸
昨天
4
0
MAT使用-jvm内存溢出问题分析定位

1.MAT简介: MAT 全称 Eclipse Memory Analysis Tools 是一个分析 Java堆数据的专业工具,可以计算出内存中对象的实例数量、占用空间大小、引用关系等,看看是谁阻止了垃圾收集器的回收工作,...

xiaomin0322
昨天
4
0
内网和外网之间的通信(端口映射原理)

首先解释一下“内网”与“外网”的概念: 内网:即所说的局域网,比如学校的局域网,局域网内每台计算机的IP地址在本局域网内具有互异性,是不可重复的。但两个局域网内的内网IP可以有相同的...

Jack088
昨天
5
0
3.深入jvm内核-原理、诊断与优化-4. GC算法和种类

一、GC算法和种类 GC的概念 GC算法 引用计数法 标记清除 标记压缩 复制算法 可触及性 Stop-The-World GC的对象是堆空间和永久区 引用计数法 老牌垃圾回收算法 通过引用计算来回收垃圾 使用者...

hexiaoming123
昨天
4
0
MySQL中的哈希索引

Memory中的哈希索引 哈希索引是基于哈希表实现的,只有精确匹配索引所有列的查询才有效。对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码,哈希码是一个较小的值,并且不同键值的...

我的眼里只有眼屎
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部