易截截图软件、单文件、免安装、纯绿色、仅160KB

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端:
server程序创建一个FIFO,并从FIFO读取字符,转换成大写后输出到屏幕。
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管理员们,该刷新内核了

Linux管理员们,该刷新内核了
Linux之父李纳斯·托沃兹(Linus Torvalds)援引《圣经》中的一句话寄语Linux爱好者:“一往无前,生生不息。”但是实际上,更准确的理解应该是“一往无前,测试不止”。而最新需要我们测试的就是近期刚发布的2.6.34版Linux内核,该内核版本的发布时间距离此前一个版 ......

Linux音频编程指南






<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
H1 { margin-bottom: 0.21cm }
H1.western { font-family: "DejaVu Serif", serif }
H1.cjk { font-family: "AR PL UKai CN"; font-size: 24pt; font-style: normal; font-weight: bold }
H1.ctl { font- ......

OK6410 烧写LINUX系统的问题与解决

    OK6410是一款设计优良,性价比出众的基于S3C6410X-66的ARM11开发板产品。官方提供了wince6 linux android 的支持与DEMO程序。根据其手册,烧写WINCE没有什么大问题。但如果原来是WINCE,想改烧写U-boot就会出现一些问题。
    按照手册,在用SD卡启动后,下载u-boot到开发板上,用u-boo ......

C++ 之Boost学习笔记 Linux下编程

C++学习笔记--Linux下编程
一、关于Boost的使用,几种常用方法,只是自己工作、学习中总结的,有些方法的确有些繁琐,能满足需求,应该还有更加简单快捷的方式,待改进。
1、判断字符串与正则表达式是否匹配(完全匹配)
bool IsMatch(const char* data,const char * regx)
{
    boost::regex express ......

10大linux开发工具


Linux开发环境必备十大开发工具
 
 
  【IT168 专稿】Linux是一个优秀的开发环境,但是如果没有好的开发工具作为武器,这个环境给你带来的好处就会大打折 扣。幸运的是,有很多好用的Linux和开源开发工具供你选择,如果你是一个新手,你可能不知道有哪些工具可用。本文将介绍其中十个杰出的开源开发工具, ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号