- 论坛徽章:
- 0
|
11可用积分
我看open的man里说O_NONBLOCK标识可以实现非阻塞方式,这样read和write应该可以立即返回吧,但是我写了一个测试程序却不行。
这是代码:
这是代码:
C/C++ code
int f;
char *d;
size_t s = 1024 * 1024 * 1024; // 写入的文件大小是1GB
f = open( "/tmp/big_test", O_RDWR|O_NONBLOCK|O_CREAT|O_TRUNC, 0777 ); // 用非阻塞方式打开文件
if( f == -1 ) { perror( "open error" ); return -1; }
if( fcntl( f, F_SETFL, O_NONBLOCK ) != 0 ) { perror( "fcntl error" ); return -1; }
d = malloc( s );
if( d == NULL ) { perror( "malloc error" ); return -1; }
printf( "start write time=%d\n", time(0) );
if( write( f, d, s) < 0 ) perror( "write error" ); // 这里write并没有立即返回
printf( "end write time=%d\n", time(0) );
|
|
最佳答案
查看完整内容
异步读写是用aio_read, aio_write来做的, 你此时设置这个NONBLOCK只是说是非阻塞模式. 而非阻塞模式则是指当前如果不能马上进行读写的话就返回. 比如在网络传输时的read, 如果没有数据可读就不阻塞而返回. 但是读写过程仍然会花时间的. 楼主可以看看第六章的那几种I/O模式.
|