UNIX IPC -----FIFO 实现
来源:互联网 发布:苹果手机赌博软件 编辑:程序博客网 时间:2024/06/08 08:13
* Created: Nov 13th 2013
* Author: freeking
* Descripition fifo 实现client发送一个路径/文件名,sever返回该文件
* 的内容。
* ******************************************************************/
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#define MAXLINE 4096
#define FIFO1 "/tmp/fifo.1"
#define FIFO2 "/tmp/fifo.2"
#define FILE_MODE 0664
client.c
#include "fifo.h"
void client(int readfd, int writefd)
{
size_t len;
ssize_t n;
char buff[MAXLINE];
if (NULL == fgets(buff, MAXLINE, stdin))
{
perror("fgets");
}
len = strlen(buff);
if (buff[len - 1] = '\0')
len--;
write(writefd, buff, len);
memset(buff, 0, MAXLINE-1);
while ((n = read(readfd, buff, MAXLINE)) > 0 )
{
//printf("~~~~%d : %s\n", __LINE__, buff);
write(STDOUT_FILENO, buff, n);
}
}
int main(int argc, char ** argv)
{
int readfd, writefd;
writefd = open(FIFO1, O_WRONLY, 0);
readfd = open(FIFO2, O_RDONLY, 0);
client(readfd, writefd);
close(readfd);
close(writefd);
unlink(FIFO1);
unlink(FIFO2);
return 0;
}
server:
#include "fifo.h"
void server(int readfd, int writefd)
{
int fd;
ssize_t n;
char buff[MAXLINE] = {0};
if (0 == (n = read(readfd, buff, MAXLINE)))
{
perror("end of file");
return;
}
buff[n] = '\0';
if ((fd = open(buff, O_RDONLY)) < 0)
{
snprintf(buff + n, sizeof(buff) - n, ":can't open , %s\n", strerror(errno));
n = strlen(buff);
write(writefd, buff, n);
}
else
{
memset(buff, 0, MAXLINE-1);
while((n = read(fd, buff, MAXLINE)) > 0)
{
write(writefd, buff, n);
}
close(fd);
}
}
int main(int argc, char ** argv)
{
int readfd, writefd;
/* create two FIFOs; OK if they already exsit */
if ((mkfifo(FIFO1, FILE_MODE) < 0) && errno != EEXIST)
{
perror("can't create FIFO1");
}
if ((mkfifo(FIFO2, FILE_MODE) < 0) && errno != EEXIST)
{
unlink(FIFO2);
perror("can't create FIFO2");
}
readfd = open(FIFO1, O_RDONLY, 0);
writefd = open(FIFO2, O_WRONLY, 0);
server(readfd, writefd);
return 0;
}
验证方式:
1:后台方式启动server
2:启动client,输入路径+文件名
- UNIX IPC -----FIFO 实现
- IPC FIFO
- UNIX/Linux进程间通信IPC系列(三)FIFO
- IPC实现机制(二)---命名管道(FIFO)
- Linux IPC - FIFO
- linux ipc &pipe fifo
- linux ipc—FIFO
- IPC ------有名管道fifo
- IPC之FIFO
- IPC——FIFO
- 【IPC】管道和FIFO
- 利用Unix域套接字实现IPC
- unix-ipc
- UNIX IPC
- 《UNIX网络编程 卷2》 笔记: 使用FIFO实现信号量
- 【UNIX网络编程】FIFO
- UNIX命名管道FIFO
- unix网络编程----------fifo
- Object-c NSdata 读取和写入二进制文件
- Configuraion Information forHACMP(PowerHA)
- Hibernate复合主键映射
- C/C++ note
- DNS子域委派
- UNIX IPC -----FIFO 实现
- ASP.NET利用showModalDialog來做一個父子視窗互相傳值的功能
- 丑数分解
- Javascript_16_DOM_form练习
- MySql触发器实例
- 很好的文章,没时间转了,把网址记下,关于linux驱动开发的
- 关于JSP和Servlet的一些回顾认识
- SQL, PL/SQL 之NUMBER数据类型
- 程序员面试——走台阶问题