linux下用fifo实现可反复linux下c实现的聊天室功能的程序。

&&&&利用LINUX FIFO命名管道技术实现双向聊天的C语言源代码
&利用LINUX FIFO命名管道技术实现双向聊天的C语言源代码
/**************************************************************************/
//本程序是利用LINUX FIFO命名管道技术实现双向聊天的C语言源代码。
//优点:代码简洁明了。
//chat.c: 聊天源代码。
//makefile: 利用宏定义,把一个源码生成两个不同的可执行程序。
//make clean 清除上次编译生成的结果文件。
//make 重新编译生成两个可执行程序。./a_chat和./b_chat的执行顺序没有先后。
//作者:david.q@sz
/**************************************************************************/
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
Q.为什么我点的下载下不了,但积分却被扣了
A. 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。
Q.我的积分不多了,如何获取积分?
A. 获得积分,详细见。
完成任务获取积分。
论坛可用分兑换下载积分。
第一次绑定手机,将获得5个C币,C币可。
关注并绑定CSDNID,送10个下载分
下载资源意味着您已经同意遵守以下协议
资源的所有权益归上传用户所有
未经权益所有人同意,不得将资源中的内容挪作商业或盈利用途
CSDN下载频道仅提供交流平台,并不能对任何下载资源负责
下载资源中如有侵权或不适当内容,
本站不保证本站提供的资源的准确性,安全性和完整性,同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
开发技术下载排行
您当前C币:0&&&可兑换 0 下载积分
兑换下载分:&
消耗C币:0&
立即兑换&&
兑换成功你当前的下载分为 。前去下载资源
你下载资源过于频繁,请输入验证码
如何快速获得积分?
你已经下载过该资源,再次下载不需要扣除积分
利用LINUX FIFO命名管道技术实现双向聊天的C语言源代码
所需积分:2
剩余积分:0
扫描微信二维码精彩活动、课程更新抢先知
VIP会员,免积分下载
会员到期时间:日
剩余下载次数:1000
利用LINUX FIFO命名管道技术实现双向聊天的C语言源代码
剩余次数:&&&&有效期截止到:
你还不是VIP会员VIP会员享免积分 . 专属通道极速下载
VIP下载次数已满VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员
你的VIP会员已过期VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员Linux如何创建FIFO_未来软件园
手机版,更便捷!
当前位置: >
> Linux如何创建FIFO
Linux如何创建FIFO
今天office2013给大家带来了Linux如何创建FIFO的教程!希望对大家有所帮助哦!FIFO,又称作命名管道(named pipe),它是Linux系统中用于进程间通信的一种方法。FIFO和pipe的区别在于:FIFO在文件系统中有对应的inode,可以通过ls命令查看。sh-3.2# ls -lhF 。/fifo_file100 prwxrwxrwx 1
root 0 Jan 1 1970 。/fifo_file|sh-3.2#正因为它有一个名字,所以任何进程都可以访问它,所以FIFO可用于任意两个进程之间的通信。pipe没有名字,在现有文件系统中无法查看到它的存在。它只能用于父子进程、兄弟进程等具有血缘关系的进程间通信。创建FIFO的方法如下:1. 调用umask系统调用来设定创建文件的权限,#include 《sys/types.h》#include 《sys/stat/h》mode_t umask(mode_t mask);2. 调用unlink系统调用先删除已经存在的fifo,#include 《unistd.h》int unlink(const char *pathname);3. 调用mkfifo库函数去创建一个FIFO文件,#include 《sys/types.h》#include 《sys/stat.h》int mkfifo(const char *pathname, mode_t mode);或者可以通过调用mknod系统调用并且指定参数mode为S_IFIFO也可以创建一个FIFO文件,#include 《sys/types.h》#include 《sys/stat.h》#include 《fcntl.h》#include 《unistd.h》int mknod(const char *pathname, mode_t mode, dev_t dev);注意:1. 使用FIFO进行通信,每次传输的数据要限定在PI_BUF之内;2. 对于FIFO的访问就像访问正规文件(regular file)一样,可以使用open/read/write/close等系统调用进行访问。使用FIFO的应用有:1. 单纯的生产者/消费者问题,一个进程读数据,一个进程写数据;2. 实现client/server架构的程序,客户端和服务器端通过FIFO进行通信。上面就是Linux创建FIFO管道的方法介绍了,本文除了介绍了FIFO管道的创建外,还稍微介绍了下FIFO的使用及其注意事项,在使用的时候需特别注意。linux进程间通信-有名管道(FIFO) - fangsh - 博客园
有名管道(
命名管道也被称为FIFO文件,是一种特殊的文件。由于
(1)创建命名管道
&用如下两个函数中的其中一个,可以创建命名管道。
#include &sys/types.h&
#include &sys/stat.h&
int mkfifo(const char *filename, mode_t mode);
int mknod(const char *filename, mode_t mode | S_IFIFO, (dev_t)0);
filname是指文件名,而
open(const char *path, O_RDONLY);//1
open(const char *path, O_RDONLY | O_NONBLOCK);//2
open(const char *path, O_WRONLY);//3
open(const char *path, O_WRONLY | O_NONBLOCK);//4
(2)打开命名管道
和打开其他文件一样,可以用
有两点要注意:
1、就是程序不能以
2、就是传递给
3、第二个参数中的选项
对于以只读方式(
对于以只写方式(
管道的写入端从一个文件读出数据,然后写入写管道。管道的读取端从管道读出后写到文件中。
写入端代码:
#include &unistd.h&
#include &stdlib.h&
#include &fcntl.h&
#include &limits.h&
#include &sys/types.h&
#include &sys/stat.h&
#include &stdio.h&
#include &string.h&
int main()
const char *fifo_name = "/tmp/my_fifo";
int pipe_fd = -1;
int data_fd = -1;
int res = 0;
const int open_mode = O_WRONLY;
int bytes_sent = 0;
char buffer[PIPE_BUF + 1];
int bytes_read = 0;
if(access(fifo_name, F_OK) == -1)
printf ("Create the fifo pipe.\n");
res = mkfifo(fifo_name, 0777);
if(res != 0)
fprintf(stderr, "Could not create fifo %s\n", fifo_name);
exit(EXIT_FAILURE);
printf("Process %d opening FIFO O_WRONLY\n", getpid());
pipe_fd = open(fifo_name, open_mode);
printf("Process %d result %d\n", getpid(), pipe_fd);
if(pipe_fd != -1)
bytes_read = 0;
data_fd = open("Data.txt", O_RDONLY);
if (data_fd == -1)
close(pipe_fd);
fprintf (stderr, "Open file[Data.txt] failed\n");
return -1;
bytes_read = read(data_fd, buffer, PIPE_BUF);
buffer[bytes_read] = '\0';
while(bytes_read & 0)
res = write(pipe_fd, buffer, bytes_read);
if(res == -1)
fprintf(stderr, "Write error on pipe\n");
exit(EXIT_FAILURE);
bytes_sent +=
bytes_read = read(data_fd, buffer, PIPE_BUF);
buffer[bytes_read] = '\0';
close(pipe_fd);
close(data_fd);
exit(EXIT_FAILURE);
printf("Process %d finished\n", getpid());
exit(EXIT_SUCCESS);
管道读取端:&
#include &unistd.h&
#include &stdlib.h&
#include &stdio.h&
#include &fcntl.h&
#include &sys/types.h&
#include &sys/stat.h&
#include &limits.h&
#include &string.h&
int main()
const char *fifo_name = "/tmp/my_fifo";
int pipe_fd = -1;
int data_fd = -1;
int res = 0;
int open_mode = O_RDONLY;
char buffer[PIPE_BUF + 1];
int bytes_read = 0;
int bytes_write = 0;
memset(buffer, '\0', sizeof(buffer));
printf("Process %d opening FIFO O_RDONLY\n", getpid());
pipe_fd = open(fifo_name, open_mode);
data_fd = open("DataFormFIFO.txt", O_WRONLY|O_CREAT, 0644);
if (data_fd == -1)
fprintf(stderr, "Open file[DataFormFIFO.txt] failed\n");
close(pipe_fd);
return -1;
printf("Process %d result %d\n",getpid(), pipe_fd);
if(pipe_fd != -1)
res = read(pipe_fd, buffer, PIPE_BUF);
bytes_write = write(data_fd, buffer, res);
bytes_read +=
}while(res & 0);
close(pipe_fd);
close(data_fd);
exit(EXIT_FAILURE);
printf("Process %d finished, %d bytes read\n", getpid(), bytes_read);
exit(EXIT_SUCCESS);
(5)命名管道的安全问题
有一种情况是:一个LINUX下网络即时聊天程序-_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
LINUX下网络即时聊天程序-
上传于||文档简介
&&一​个​用​C​语​言​写​的​多​线​程​简​易​聊​天​程​序​。​广​西​大​学​计​算​机​学​院​老​师​布​置​的​网​络​编​程​的​课​程​作​业​。
阅读已结束,如果下载本文需要使用3下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩9页未读,继续阅读
你可能喜欢fifo 有名管道,双方都可读写功能,实现双向通信。 Linux-Unix program 238万源代码下载-
&文件名称: fifo
& & & & &&]
&&所属分类:
&&开发工具: Unix_Linux
&&文件大小: 12 KB
&&上传时间:
&&下载次数: 7
&&提 供 者:
&详细说明:有名管道,双方都可读写功能,实现双向通信。-Named pipe to both read and write capabilities, two-way communication.
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&fifo\gcc编译\read&&....\.......\write&&....\read.c&&....\write.c&&....\交叉编译\read&&....\........\write&&....\gcc编译&&....\交叉编译&&fifo
&输入关键字,在本站238万海量源码库中尽情搜索:

我要回帖

更多关于 fifo实现 的文章

 

随机推荐