写脚本的时候用到FIFO,不是很会,就学习了下。下面是简介:
FIFO也称为有名管道,它是一种文件类型。FIFO简单理解,就是它能把两个不相关的进程联系起来,FIFO就像一个公共通道,解决了不同进程之间的“代沟”。普通的无名管道只能让相关的进程进行沟通(比如父shell和子shell之间)。还是用代码来说明问题好了。
下面我模拟了一个FIFO通信的过程,主要有两个进程。
#!/bin/bash
#Client.sh
#不断向fifo写入数据
tmp_fifo="/tmp/test.fifo"
rm -f $tmp_fifo
mkfifo $tmp_fifo
exec 6<>$tmp_fifo #这句话能把管道变成非阻塞!
i=0
while :
do
sleep 1 # 1秒写一次
echo "$i" >&6
echo "$i" #输出到终端的时候要小心,会覆盖你的终端,所以要停止,最好直接挂起进程!!
let i++
done
exec 6>&-
#!/bin/bash
#Server.sh
#不断从fifo中读出数据
tmp_fifo="/tmp/test.fifo"
echo "$tmp_fifo"
exec 6<>$tmp_fifo #建立一个绑定
while :
do
read TEXT
sleep 1
echo "$TEXT" #每1s就读取一个数据,并且打印到终端,要停止,最好挂起进程!
done <&6
打开终端A:
$ ./Client.sh
打开终端B:
$./Server.sh
你就能看到在终端B中从fifo中读取到的数据,你要是在终端B中把每次读fifo的间隔给改成2秒,就更能说明问题了。上面的程序,在实验的时候最好通过不断挂起A进程来查看,然后观察B进程的输出。你会知道FIFO整个是怎么跑的。。。这里就不详细解释了!(最近太累了~~~)
FIFO的出现,极好地解决了系统在应用过程中产生的大量的中间临时文件的问题。FIFO可以被shell调用使数据从一个进程到另一个进程,系统不必为该中间通道去烦恼清理不必要的垃圾,或者去释放该通道的资源,它可以被留做后来的进程使用。并且规避了匿名管道在作用域的限制,可应用于不相关的进程之间。
分享到:
相关推荐
嵌入式Linux应用程序开发FIFO管道命名实验。包含client.c,client.h,server.c,3个文件
管道fifo通信程序,自己写的有注释,能够一方发数据,接收端能够接受并打印出来
C语言字符串处理、Linux系统编程、多进程、多线程、进程间通信、线程同步、实现的功能有暂停、快进、快退、显示歌词、单曲循环、列表循环、随机播放、声音调节等
FIFO配合管道PIPE,实现FIFO传递数据,PIPE触发epoll,异步IO效果
Linux系统编程——进程间通信:命名管道(FIFO),相关教程链接如下: http://blog.csdn.net/tennysonsky/article/details/46326957
进程间通信之有名管道(fifo) 注意: 如果只打开有名管道的一端 则系统将暂时阻塞打开进程 直到有另一个进程打开该管道的另一端 当前进程才会继续执行 七种进程间通信方式: 一 无名管道( pipe ) 二 有名管道...
//本程序是利用LINUX FIFO命名管道技术实现双向聊天的C语言源代码。 //优点:代码简洁明了。 //其中: //chat.c: 聊天源代码。 //makefile: 利用宏定义,把一个源码生成两个不同的可执行程序。 // //使用: //make ...
FIFO(命名管道)Linux,带有eclipse CDT完整workspace。
同步通信FIFO 在Java中使用命名管道在两个进程之间进行同步通信在这里,我使用命名管道(FIFO)在两个进程之间进行通信。 命名管道是使用clipc库实现的。
/bin/bash SEND_THREAD_NUM=13 tmp_fifofile=”/tmp/$$.fifo” # 脚本运行的当前进程ID号作为文件名 mkfifo “$tmp_fifofile” # 新建一个随机fifo管道文件 exec 6<>”$tmp_fifofile” # 定义文件描述符6指向这个...
封装管道操作接口, 包含管道创建、读操作、写操作等。
开启管道mkfifo fifo1 fifo2 make或者gcc chat.c 得到a.out或者其他文件 ./a.out 1登录账号 在另一终端./a.out 2登录账号2 即可相互聊天
mkfifo $tmp_fifofile # 新建一个随机fifo管道文件 exec 6<>$tmp_fifofile # 定义文件描述符6指向这个fifo管道文件 rm $tmp_fifofile thread=10 for ((i=0;i<$thread;i++));do # for循环 往
命名管道的应用编程基础,主要是创建和操作,他实现的是不同管道间的共享
linux下面实现的基于管道通信的聊天程序
fifo_write.c文件,配合 fifo_read.c文件,具体在博客上
二 有名管道( fifo ) 三 共享内存 shared memory 四 信号 sinal 五 消息队列 message queue ) 六 信号量 semophore 七 套接字 socket 以上七种进程间通信的完整代码 皆可以在我的资源列表中获取下载: 资源...
管道是一种队列类型的数据结构,它的数据从一端输入,另一端输出。管道最常见的应用是连接两个进程的输入输出,即把一个进程的输出编程另一个进程的输入
所谓FIFO就是先进先出的意思,通俗的说,就像数据从一个管道的一端进去而从管道的另一端输出。FIFO是一个没有地址端口的存储器,它依靠内部写指针(指定写数据的位置)和读指针(指定读数据的位置)来进行数据的存储...
有名管道又称为FIFO,是进程间通信的一种方式。FIFO具有以下特点: 1.全双工的通信模式,数据先进先出; 2.可以用于任意的进程之间,通过指定相同的管道文件进行通信; 3.文件名存在文件系统中,而管道中...