关于带缓冲的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,通过将一段主存空间映射至内存