1. It implements FIFO feature of the pipes
2. They can be opened just like normal files using their names
3. Data can be read from or written to the fifo
Working with FIFO in a Shell
Creating a FIFO
creates fifo- the named pipes
mkfifo [options] fifo_name
$ mkfifo fifo
There is one more way by which we can FIFO using mknod. mknod is used to create block or character special files.
$ mknod [OPTION]... NAME TYPE
To create a FIFO fifo1
$ mknod fifo1 p
where p coressponds to file type : pipe (remember FIFO is a named pipe).
Reading/ Writing data from/to a FIFO
Let’s open two terminals
In the first terminal
$ cat > fifo
we are experimenting with the FIFOThis is second line. After opening the fifo in the second terminal for readingusing cat, you will notice the above two lines displayed there.
Now open the second terminal and go to the directory containing the FIFO ‘fifo’
$ cat fifo
we are experimenting with the FIFOThis is second line. After opening the fifo in the second terminal for reading
Now keep on writing to the first terminal. You will notice that every time you press enter, the coressponding line appears in the second terminal.
Pressing CTRL+D in the first terminal terminates writing to the fifo. This also terminates the second process because reading from the fifo now generates a “BROKEN PIPE” signal. The default action for this is to terminate the process.
Let us now see the details of the file ‘fifo’
$ ls -l fifo prw-r--r-- 1 user user 0 Feb 14 10:05 fifo
The p in the beginning denotes that it is a pipe.
Let’s see more details about the pipe using stat
$ stat fifo File: `fifo'Size: 0 Blocks: 0 IO Block: 4096 fifo Device: fd00h/64768d Inode: 1145493 Links: 1 Access: (0644/prw-r--r--) Uid: ( 0/ user) Gid: ( 0/ user) Access: 2008-02-14 10:05:49.000000000 +0530 Modify: 2008-02-14 10:05:49.000000000 +0530 Change: 2008-02-14 10:05:49.000000000 +0530
If you notice carefully, FIFOs just like a normal file possess all the details like inode number, the number of links to it, the access, modification times, size and the access permissions.
As in the case of pipes, there can be multiple readers and writers to a pipe. Try opening multiple terminals to read from and write to a pipe.