Linux下进程间通信机制:FIFO(命名管道)

FIFO ,又称命名管道 ,是Linux下(unix环境下)一种进程间通信的机制,应用广泛。

 

函数mkfifo 用于创建命名管道,使用命令man 3 mkfifo 可查看此函数信息。

FIFO创建后,可以像普通文件一样对其访问。

 

 

Linux下一个同名命令mkfifo 也用于创建FIFO,例如:

执行命令

$ mkfifo /tmp/fifo
$ cat /tmp/fifo

程序阻塞。

再打开一个shell,执行

$ echo hello > /tmp/fifo

前一个程序返回,显示hello

 

 

下面用一个简单程序,演示FIFO IPC的用法。

下载地址:http://download.csdn.net/source/2378181

该程序分为2端:

  1. server程序创建一个FIFO,并从FIFO读取字符,转换成大写后输出到屏幕。
  2. client程序读取用户输入并写入FIFO。

 

common.h

#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #define FIFO_PATH "/tmp/myfifo"

 

 

server.c

/* *将从FIFO收到到数据(字符)转换为大写,并输出到屏幕 */ #include "common.h" int main() { int ret; int fd; char buffer; int nread; int i; /*建立FIFO*/ ret = mkfifo(FIFO_PATH, 0777); /*打开FIFO*/ fd = open(FIFO_PATH, O_RDONLY); if(-1 == fd) { printf("error/n"); return -1; } while(1) { nread = read(fd, &buffer, 1); if(nread > 0) { buffer = toupper(buffer); printf("%c", buffer); } } }

 

运行server后,可看到创建了文件/tmp/myfifo,这是mkfifo函数指定的命名管道的路径(名字)。

当然,系统不会真的在磁盘上创建这个文件。

 

client.c

/* *读取输入,并写入FIFO */ #include "common.h" int main() { int fd; int ret; char c; fd = open(FIFO_PATH, O_WRONLY); if(-1 == fd) { printf("error/n"); return -1; } while(c = getchar()) { write(fd, &c, 1); } }

 

先启动server程序,再运行client,随便输入些字符。

server端将在屏幕上显示转换为大写后的输入字符。

 

 

 

作者:ZhengZhiren

原文链接:http://blog.csdn.net/ZhengZhiRen/archive/2010/05/21/5613843.aspx

你可能感兴趣的:(linux,server,unix,shell,buffer,Path)