当前位置: 技术问答>linux和unix
<Unix网络编程>上大概73页的Readn函数问题
来源: 互联网 发布时间:2016-04-26
本文导语: 上大概73页的Readn函数问题 请问这个函数中使用read(...),其中有一句 n = read(...); if(n == 0) break; 我想问一下,read如果没有数据不是会阻塞吗?怎么会返回0呢?如果这个作者的readn函数被设计成非阻塞的,那...
上大概73页的Readn函数问题
请问这个函数中使用read(...),其中有一句
n = read(...);
if(n == 0)
break;
我想问一下,read如果没有数据不是会阻塞吗?怎么会返回0呢?如果这个作者的readn函数被设计成非阻塞的,那他后面的代码都用到了这个函数,都不是按阻塞用得啊
请问这个函数中使用read(...),其中有一句
n = read(...);
if(n == 0)
break;
我想问一下,read如果没有数据不是会阻塞吗?怎么会返回0呢?如果这个作者的readn函数被设计成非阻塞的,那他后面的代码都用到了这个函数,都不是按阻塞用得啊
|
文件结束也会返回0
并且 read 可以 是非阻塞 STDIN_FILENO
下面是例
#include "head.h"
char buf[500000];
int main(int argc, char** argv)
{
int nwrite, ntowrite;
char *ptr = NULL;
ntowrite = read(STDIN_FILENO, buf, sizeof(buf));
fprintf(stderr, "read %d bytesn", ntowrite);
set_fl(STDOUT_FILENO, O_NONBLOCK);
ptr = buf;
while(ntowrite > 0){
errno = 0;
nwrite = write(STDOUT_FILENO, ptr, ntowrite);
fprintf(stderr, "nwrite = %d bytes, errno = %dn", nwrite, errno);
if(nwrite > 0){
ntowrite -= nwrite;
ptr += nwrite;
}
}
clr_fl(STDOUT_FILENO, O_NONBLOCK);
exit(0);
}
static int set_fl(int fd, int flags)
{
int val;
val = fcntl(fd, F_GETFL, 0);
if(val
并且 read 可以 是非阻塞 STDIN_FILENO
下面是例
#include "head.h"
char buf[500000];
int main(int argc, char** argv)
{
int nwrite, ntowrite;
char *ptr = NULL;
ntowrite = read(STDIN_FILENO, buf, sizeof(buf));
fprintf(stderr, "read %d bytesn", ntowrite);
set_fl(STDOUT_FILENO, O_NONBLOCK);
ptr = buf;
while(ntowrite > 0){
errno = 0;
nwrite = write(STDOUT_FILENO, ptr, ntowrite);
fprintf(stderr, "nwrite = %d bytes, errno = %dn", nwrite, errno);
if(nwrite > 0){
ntowrite -= nwrite;
ptr += nwrite;
}
}
clr_fl(STDOUT_FILENO, O_NONBLOCK);
exit(0);
}
static int set_fl(int fd, int flags)
{
int val;
val = fcntl(fd, F_GETFL, 0);
if(val