c 有名管道FIFO

我理解,fifo 就是一文件。其实,一般文件也可以在进程间传递信息,只要控制好进程间的读写互斥就行了

进程一:特别要注意mkfifo第二个参数,它是生成文件的权限参数。用0666 就行。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define  PATH "/home/wzpc/fifo1"

int main(void){

mkfifo(PATH,0666);
	int fd = open(PATH, O_WRONLY);
	write(fd,"hello",5);
	close(fd);
	
return 0;
}

进程二:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define  PATH "/home/wzpc/fifo1"

int main(void){
	int d=open(PATH,O_RDONLY);
	if(d==-1){
		puts("file error");
	}
	char c[5]={};
	read(d,c,5);
	printf("%s\n",c);
	return 0;
}

先起动进程一后,程序一一直等待,直到起动进程二后,进程一才退出等待继续执行。这样就完成了两进程的互斥交换数据。

或者先启动进程二,此进程也会等待,直到启动进程一后,进程二退出等待,继续执行。

也就是说,如进程的读,写fifo不设成非阻塞状态,先启动的一方必等待另一方启动后,交换了数据才会退出阻塞等待。保证了读写FIFO的成功。

 

 

 

 

你可能感兴趣的:(c语言,linux,算法)