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"); } } }