进程间通信--FIFO

在linux进程间通信中,管道(pipe)是非常有用的,而且我们使用的地方也非常多,但是不可否认的是管道有一个致命的缺点就是只能用于有相关关系的进程之间的通信,比如:父子进程。为了很好的解决这个问题。因此我们引入了——FIFO(first in first out)顾名思义:先入先出。相对于pipe来说,FIFO一般被称为命名管道,因为他们和文件系统相关联,可以实现任意两个进程之间的通信。
相对于pipe单工通信的特点来说,FIFO可以实现全双工的通信,这样的优点就是多个进程都可以实现对同一个FIFO的读和写,当然了这些进程之间都要相互协作,就像1一个团队,不合作怎么能够做出好的东西呢?同时也要注意1,写入的数据不能大于PIPE_BUF字节,不然会有冲突的。
在我们这个系统里,使用了mkfifo命令来创建FIFO。我们看看FIFO函数的调用。

int mkfifo(const char* path, mode_t mode);

参数path指定了创建FIFO的路径名,path一定不能存在,而参数mode指定了FIFO的权限,该参数将和进程umask一起起作用,若操作成功,则返回0,否则返回-1,同时将失败的原因保存在外部变量errno中。
在创建好FIFO之后,使用open(系统接口)函数来打开该FIFO。
接下来写一个server和一个client进程,他们之间使用FIFO来进程。

server.c

server.c

client.c

client.c

这样我们就可以实现client和server之间的通信了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章