[apue] 神奇的 Solaris pipe】的更多相关文章

说到 pipe 大家可能都不陌生,经典的pipe调用配合fork进行父子进程通讯,简直就是Unix程序的标配. 然而Solaris上的pipe却和Solaris一样是个奇葩(虽然Solaris前途黯淡,但是不妨碍我们从它里面挖掘一些有价值的东西), 有着和一般pipe诸多的不同之处,本文就来说说Solaris上神奇的pipe和一般pipe之间的异同. 1.solaris pipe 是全双工的 一般系统上的pipe调用是半双工的,只能单向传递数据,如果需要双向通讯,我们一般是建两个pipe分别读写…
先上目录 chapter 3 [apue] dup2的正确打开方式 chapter 10 [apue] 等待子进程的那些事儿 chapter 14 [apue] 使用文件记录锁无法实现父子进程交互执行同步 chapter 15 [apue] 多进程管道读写的一些疑问 [apue] 测试管道容量的一些疑问 [apue] 管道原子写入量的一个疑问 [apue] 使用 poll 检测管道断开 [apue] 使用 popen/pclose 的一点疑问 [apue] popen/pclose 疑点解惑 […
前言 标准 IO 库自 1975 年诞生以来,至今接近 50 年了,令人惊讶的是,这期间只对它做了非常小的修改.除了耳熟能详的 printf/scanf,回过头来对它做个全方位的审视,看看到底优秀在哪里. 打开关闭 要想使用 IO 流就必需打开它们.三个例外是标准输入 stdin.标准输出 stdout.标准错误 stderr,它们在进入 main 时就准备好了,可以直接使用,与之对应的文件描述符分别是 STDIN_FILENO / STDOUT_FILENO / STDERR_FILENO.除…
16.1 Introduction Chapter15讲的是同一个machine之间不同进程的通信,这一章内容是不同machine之间通过network通信,切入点是socket. 16.2 Socket Descriptors socket抽象上是一个communication endpoint,具体就是一个int型变量.生成socket的函数如下: int socket(int domain, int type, int protocol) 函数有点儿类似open,即打开一个socket d…
本文为原创文章,转载请指明该文链接 Options Controling the kind of Output -x language 明确说明输入文件的编码语言,没有该选项的话, gcc 会根据输入文件的后缀来识别其编码语言,某个特定的 -x 选项仅对紧接其后 的且在下个 -x 选项之前的输入文件起作用,现在 -x 支持的语言有: c.c++.objective-c.objective-c++.assember.ada.f77. java,比如 gcc -S -x c main_return_…
目录 stat中的st_dev和st_rdev title: stat中的st_dev和st_rdev date: 2019/11/27 21:04:25 toc: true --- stat中的st_dev和st_rdev dev_t st_dev; /* ID of device containing file */ dev_t st_rdev; /* Device ID (if special file) */ 这两个存的都是主次设备号,都要通过宏major和minor来取出来 st_de…
管道 pipe 一.概述 管道(pipe / FIFO)是一种文件,属于 pipefs 文件系统类型,可以使用 read.write.close 等系统调用进行操作 其本质是内核维护了一块缓冲区与管道相关联,对管道的任何操作,都将被内核转换成读写对应的内存缓冲区 只有当所有的写入端描述符均已关闭,且管道中的数据都被读出后,对读端描述符调用 read 才会返回 0 (EOF) 若所有读端已关闭,此时往管道的写操作会失败,调用进程会收到 SIGPIPE 信号,errno 被设置为 EPIPE 当所有…
信号的基本概念     信号是软件中断,信号提供了解决异步时间的方法.     每一中信号都有一个名字,信号名以SIG开头. 产生信号的几种方式     很多条件可以产生信号:     终端交互:用户按下某一些按键,如ctl+c,会产生信号.     硬件异常:如除数为0,内存引用错误.     kill(2)函数:将信号发送到一个进程或者进程组     kill(1)命令:该命令为kill(2)函数的接口.用于终止失控的后台in成.     检测到某软件条件发生:如网络连接上传来外数据(产生S…
前言 说到 linux 的文件系统,好多人第一印象是 ext2/ext3/ext4 等具体的文件系统,本文不涉及这些,因为研究具体的文件系统难免会陷入细节,甚至拉大段的源码做分析,反而不能从宏观的角度把握文件系统要解决的问题.一个通用的 linux 文件系统都包含哪些概念?接口如何使用?设计层面需要考虑什么问题?这都在本文的讨论范围.当然了,内容都是从 apue 搬运过来的,经过了一点点梳理加工,原书还是基于比较老的 UFS (Unix File System) 进行说明的,有些东西可能已经过时…
一.线程标识      和每个进程都有一个进程ID一样,每个线程也有一个线程ID,线程ID是以pthread_t数据类型来表示的,在Linux中,用无符号长整型表示pthread_t,Solaris 把phread_t数据类型表示为无符号整型,FreeBSD 和Mac OS X 用一个指向pthread结构的指针来表示pthread_t数据类型.      可以使用pthread_self函数获得自身的线程ID.    #include <pthread.h> pthread_t pthrea…