Linux 进程通信(System V) 第二节 ------> FIFO
来源:互联网 发布:淘宝网单人床 编辑:程序博客网 时间:2024/06/14 08:20
一.
一些简单理解:
我们知道管道是没有标志的,所以只能是在同一个进程组中进行通信,不同的祖先产生的进程之间是不可以的!!所以此处引入FIFO机制
同样也只能是单流的!不同的是FIFO是有标志的!每个FIFO都有一个路径名与之相关!
FIFO也称为 “有名管道”
#include <sys/types.h>
#include <sys/stat.h>
int mkfifo( const char* pathname, mode_t mode );
mode 与 open函数中的一样,默认为:O_CREAT | O_EXCL
if FIFO 已经存在,那么返回EEXIST错误!if不存在那么就是创建新的FIFO。if仅仅是打开FIFO,那么就可以使用open()函数就可以了!
对于一个已经创建好的FIFO来说,只能是读或者写,不能同时进行。( 半双工 )
对于FIFO来说:先进先出,所以从开头读,从尾部写
查看所创建的管道:
ls -lF /tmp/my_fifo
> prwxr-xr-x 1 pt gf 0 2012-01-13 10:43/tmp/my_fifo|
注意:ls命令的输出结果中的第一个字符为p,表示这是一个管道。最后的|符号是由ls命令的-F选项添加的,它也表示是这是一个管道。
二.
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
int main()
{
intres;
if ( ( res =mkfifo("/tmp/my_fifo", 0777) ) == 0 ) //!> 对于mkfifo来说:成功则返回0,否则返回-1
{ //!>注意全名就是 /tmp/my_fifo 其实就是tmp路径下的 my_fifo 文件
printf("FIFOcreated\n");
}
return0;
//!> exit(EXIT_SUCCESS);
}
三.
1.简介:
两个独立的程序:
1. 生产者程序,它在需要时创建管道,然后尽可能快地向管道中写入数据。
2. 消费者程序,它从FIFO中读取数据并丢弃它们。
2.代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <limits.h>
#include <sys/types.h>
#include <sys/stat.h>
#defineFIFO_NAME "/tmp/Linux/my_fifo" //!> FIFO全名
#define BUFFER_SIZE 40 //!> PIPE_BUF,linux 2.6.11 以前,是4096,以后是65536。
#defineTEN_MEG 36 * 10 //!> ( 1024 * 1024 * 10)
int main()
{
intpipe_fd;
intres;
intopen_mode =O_WRONLY; //!> 生产者:只是写data就可以了~
int bytes =0;
charbuffer[BUFFER_SIZE + 1] ="abcdefghijklmnopqrstuvwxyz";
一些简单理解:
我们知道管道是没有标志的,所以只能是在同一个进程组中进行通信,不同的祖先产生的进程之间是不可以的!!所以此处引入FIFO机制
同样也只能是单流的!不同的是FIFO是有标志的!每个FIFO都有一个路径名与之相关!
FIFO也称为 “有名管道”
#include <sys/types.h>
#include <sys/stat.h>
int mkfifo( const char* pathname, mode_t mode );
mode 与 open函数中的一样,默认为:O_CREAT | O_EXCL
if FIFO 已经存在,那么返回EEXIST错误!if不存在那么就是创建新的FIFO。if仅仅是打开FIFO,那么就可以使用open()函数就可以了!
对于一个已经创建好的FIFO来说,只能是读或者写,不能同时进行。( 半双工 )
对于FIFO来说:先进先出,所以从开头读,从尾部写
查看所创建的管道:
ls -lF /tmp/my_fifo
> prwxr-xr-x 1 pt gf 0 2012-01-13 10:43/tmp/my_fifo|
注意:ls命令的输出结果中的第一个字符为p,表示这是一个管道。最后的|符号是由ls命令的-F选项添加的,它也表示是这是一个管道。
二.
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
int main()
{
}
三.
1.简介:
两个独立的程序:
1.
2.
2.代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <limits.h>
#include <sys/types.h>
#include <sys/stat.h>
#define
#define
#define
int main()
{