Linux进程间通信(IPC)之二——命名管道(FIFO)
来源:互联网 发布:管家婆软件下载 编辑:程序博客网 时间:2024/06/08 10:16
2 命名管道的创建
#include <sys/types.h> #include <sys/stat.h>int mkfifo(const char *pathname, mode_t mode);
3 命名管道操作
1、当以阻塞(未指定O_NONBLOCK)方式只读打开FIFO的时候,则将会被阻塞,直到有其他进程以写方式打开该FIFO。
2、类似的,当以阻塞(未指定O_NONBLOCK)方式只写打开FIFO的时候,则将会被阻塞,直到有其他进程以读方式打开该FIFO。
3、当以非阻塞方式(指定O_NONBLOCK)方式只读打开FIFO的时候,则立即返回。当只写open时,如果没有进程为读打开FIFO,则返回-1,其errno是ENXIO。
4 应用实例
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
struct fifo_cmd
{
pid_t child_pid;
char cmd[100];
};
int main(void)
{
int fd;
struct fifo_cmd cmd; int err; int n;
if((err = mkfifo("/tmp/server", 0777)) < 0)
{ if(errno != EEXIST)
{ perror("mkfido fail:")
exit(-1);
}
}
if((fd = open("/tmp/server", O_RDONLY)) < 0)
{
perror("open fail: ");
exit(-1);
}
while(1)
{
if((n = read(fd, &cmd, sizeof(cmd))) < 0)
{
perror("read fail: ");
exit(-1);
}
if(n > 0)
{
printf("command from %d: %s\n", cmd.child_pid, cmd.cmd);
}
sleep(1);
}
}
请把这个代码编译成server。
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
struct fifo_cmd
{
pid_t pid;
char cmd[100];
};
int main(int argc, char* argv[])
{
int fd;
struct fifo_cmd cmd;
if ((fd = open("/tmp/server", O_WRONLY)) < 0)
{
perror("open fail: ");
exit (-1);
}
cmd.pid = getpid();
while (1)
{
printf ("%%: ");
fgets(cmd.cmd, sizeof(cmd.cmd), stdin);
cmd.cmd[strlen(cmd.cmd) - 1] = 0;
if(write(fd, &cmd, sizeof(cmd)) < 0)
{
perror("write fail: ");
exit(-1);
}
}
}
请把客户端代码编译成client。
5 总结
6
- Linux进程间通信(IPC)之二——命名管道(FIFO)
- Linux进程间通信(IPC)之二——命名管道(FIFO)
- Linux进程间通信(IPC)之二——命名管道(FIFO)
- Linux进程间通信(IPC)之二——命名管道(FIFO)
- Linux进程间通信(IPC)编程实践(二) FIFO命名管道
- 命名管道(FIFO) Linux进程进程间的通信之命名管道(FIFO)
- 进程间的通信(二)命名管道fifo
- 进程间通信--命名管道(fifo)
- Linux下进程间通信机制:FIFO(命名管道)
- Linux下进程间通信机制:FIFO(命名管道)
- 进程间的通信之命名管道(FIFO)
- Linux系统编程——进程间通信:命名管道(FIFO)
- Linux系统编程——进程间通信:命名管道(FIFO)
- Linux系统编程——进程间通信:命名管道(FIFO)
- 【Linux】进程间通信(IPC)之匿名管道和命名管道以及测试用例
- Linux(八):进程通信IPC(二)之命名管道
- Linux环境进程间通信(一)——管道(pipe)和命名管道(fifo)
- Linux环境进程间通信(一)——管道(pipe)和命名管道(fifo)
- Java同步技术(三)
- The connection to adb is down
- 执行上下文(栈)/作用域(链)/with
- cocos2dx进阶学习之CCEGLView
- eclipse . ini 内存 设置
- Linux进程间通信(IPC)之二——命名管道(FIFO)
- 第15周 项目3-在oj上玩指针<3>
- .net 最佳实践一:监测.net代码中的高内存消耗函数<转>
- COM学习
- 杭电ACM 1096 简单求和
- 100万并发连接服务器笔记之1M并发连接
- win7 64位旗舰版安装MSCOMM32.OCX的方式
- 深入理解SP、LR和PC
- 支付宝技术集成过程中遇到的问题记录