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


#include  
#include  
#include  
#include  
 
#define FIFO_SERVER "/home/share/jinbq/pthread_examples/pipe/fifoserver" 
 
main(int argc,char** argv) 
//参数为即将写入的字节数 
{ 
	int fd; 
	char w_buf[4096*2]; 
	int real_wnum; 
	int iRet; 
	 
	memset(w_buf, 0, 4096*2); 
/* 
	iRet = mkfifo(FIFO_SERVER, O_CREAT|O_EXCL); 
	if((errno == EEXIST)) 
	{ 
		printf("cannot create fifoserver\n"); 
	} 
*/ 
 
		 
 	//fd = open(FIFO_SERVER, O_WRONLY|O_NONBLOCK, 0); 
	fd = open(FIFO_SERVER, O_WRONLY, 0);  /*若没有写进程,就阻塞在这里直到有写进程*/ 
	printf("fd = %d\n", fd); 
	if(fd == -1) 
	{ 
		if(errno == ENXIO) 
		{ 
			printf("open error; no reading process\n"); 
		} 
	} 
	 
	//设置非阻塞标志 
	 
	//设置阻塞标志 
	real_wnum = write(fd, w_buf, 2048); 
	if(real_wnum == -1) 
	{ 
		if(errno == EAGAIN) 
		{ 
			printf("write to fifo error; try later\n"); 
		} 
	} 
	else  
	{ 
		printf("real write num is %d\n",real_wnum); 
	} 
	real_wnum = write(fd, w_buf, 5000); 
	//5000用于测试写入字节大于4096时的非原子性 
	//real_wnum = write(fd, w_buf, 4096); 
	//4096用于测试写入字节不大于4096时的原子性 
	 
	if(real_wnum == -1) 
	{ 
		if(errno == EAGAIN) 
		{ 
			printf("try later\n"); 
		} 
	} 
}