www.pudn.com > pthread_examples.rar > readfifo.c


#include  
#include  
#include  
#include  
 
#define FIFO_SERVER "/home/share/jinbq/pthread_examples/pipe/fifoserver" 
 
main(int argc,char** argv) 
{ 
	char r_buf[4096*2]; 
	int  fd; 
	int  r_size; 
	int  ret_size; 
	int iRet; 
	r_size = atoi(argv[1]); /*传入的参数是需要读取的字节数*/ 
	printf("requred real read bytes %d\n", r_size); 
	 
	memset(r_buf, 0, sizeof(r_buf)); 
 
	iRet = mkfifo(FIFO_SERVER, O_CREAT|O_EXCL); 
	if((errno == EEXIST)) 
	{ 
		printf("cannot create fifoserver\n"); 
	} 
	 
	//fd = open(FIFO_SERVER, O_RDONLY|O_NONBLOCK, 0); 
	fd = open(FIFO_SERVER, O_RDONLY, 0); 
	//在此处可以把读程序编译成两个不同版本:阻塞版本及非阻塞版本 
 
	printf("fd = %d\n", fd); 
	 
	 
	if((fd == -1) && (errno != EAGAIN)) 
	{ 
		printf("open %s for read error\n", FIFO_SERVER); 
		exit(1);	 
	} 
	while(1) 
	{ 
		memset(r_buf, 0, sizeof(r_buf)); 
		ret_size = read(fd, r_buf, r_size); 
		if(ret_size == -1) 
		{ 
			if(errno == EAGAIN) 
			{ 
				printf("no data avlaible\n");		 
			} 
		} 
		printf("real read bytes %d\n",ret_size); 
		sleep(1); 
	}	 
	pause(); 
	unlink(FIFO_SERVER); 
}