关于带缓冲的 io 与不带缓冲的 io, 此时的缓冲指应用层面的缓冲, 即先写入缓冲区 (用户空间), 缓冲区满时执行系统调用, 将数据拷贝至内核 (内核缓冲区), 内核缓冲区满才执行 io
即双缓冲, 第一层为了减少系统调用次数, 第二层为了减少 io 次数
进程间通信方式
匿名 pipe, 通过文件名描述符建立管道, pipe(fd), 然后调用 fork, 通过 fd 来读写管道中的数据, 可想而知父进程和子进程共享的东西是文件描述符
高级 pipe,pipe,fork,exe() 执行其他程序, 即实现两个不同程序的通信
有名 pipe, 通过 int mkfifo(const char *pathname, mode_t mode); 打开一个有名管道, 一旦创建有名管道后, 就可以使用一般的文件操作函数操作它, 即用 fd=fopen(文件名), 用 fd 读写
消息队列, 通过 ftok 返回一个 key 值: key_t ftok( char * fname, int id ),msqid = msgget(key, IPC_CREAT|0777) 创建一个消息队列 msqid. 客户端用 ftok 传入相同文件名, 可活动 key 值
信号量, int semget(key_t key, int num_sems, int sem_flags)
内存映射之 mmap , 通过将一段硬盘地址映射至内存, 实现多进程与服务进程间的通信, 容量大
内存映射至 shm, 通过将一段主存空间映射至内存
来源: http://www.bubuko.com/infodetail-3105902.html