#include #include #include #include #include #include #define BASIC_UNIT 1024*1024 //#define BASIC_UNIT 1 char large_buf[BASIC_UNIT]; void fd_pair(int *fd) { /* if(pipe(fd)<0) perror("pipe"); */ if(socketpair(AF_UNIX,SOCK_STREAM,0,fd) <0) perror("socketpair"); } void set_nonblocking(int fd) { int val=fcntl(fd,F_GETFL); if(val==-1) perror("fcntl"); val|=O_NONBLOCK; fcntl(fd,F_SETFL,val); } int main(int argc,char *argv[]) { int fd[2],rc; fd_pair(fd); set_nonblocking(fd[1]); while(1){ rc=write(fd[1],large_buf,sizeof(large_buf)); if(rc<0){ if(errno==EWOULDBLOCK) printf("blocking, thank you, goodbye.\n"); else perror("write"); break; } } return 0; }