当前位置:  技术问答>linux和unix

一个简单非阻塞程序问题

    来源: 互联网  发布时间:2016-12-17

    本文导语:  请问下我把标准输出设置为非阻塞了,为什么err.txt出错文件里没EAGAIN出错信息 #include  #include  #include  #include  #include  #define MAX 1000000 #define LEN 1024 int main(int argc, char **argv) { int fd1, fd2, flags; FILE *fp; char bu...

请问下我把标准输出设置为非阻塞了,为什么err.txt出错文件里没EAGAIN出错信息

#include 
#include 
#include 
#include 
#include 
#define MAX 1000000
#define LEN 1024
int main(int argc, char **argv)
{
int fd1, fd2, flags;
FILE *fp;
char buf[MAX];
int n, rest;
char *p = buf;
char content[LEN];
if(argc != 3)
{
printf("expect argsn");
exit(1);
}
fd1 = open(argv[1], O_RDONLY);
if(fd1 == -1)
{
perror("fail to open");
exit(1);
}
fd2 = open(argv[2], O_WRONLY);
if(fd2 == -1)
{
perror("fail to open");
exit(1);
}
fp = fdopen(fd2, "w");
if(fp == NULL)
{
perror("fail to read");
exit(1);
}
flags = fcntl(STDOUT_FILENO, F_GETFL, 0);
if(flags == -1)
{
perror("fail to fcntl");
exit(1);
}

flags |= O_NONBLOCK;
if(fcntl(STDOUT_FILENO, F_SETFL, 0) == -1)
{
perror("fail to fcntl");
exit(1);
}

rest = read(fd1, buf, MAX);
printf("get %d bytes from %sn", rest, argv[1]);

while(rest > 0)
{
errno = 0;
n = write(STDOUT_FILENO, p, rest);
fprintf(fp, "write %d, errno %sn", n, strerror(errno));
if(rest > 0)
{
p += n;
rest -= n;
}
}
printf("donen");
close(fd1);
fclose(fp);
return 0;
}

|
考虑把输出定向到一个管道呢?
管道满了的时候,应该就EAGAIN了

|
你好像还是没有明白kk的意思呢,出错和你读写的文件大小没有关系呢......只和是否可读写有关系

    
 
 

您可能感兴趣的文章:

  • 什么是非阻塞啊?我用下面的程序设计的,用非阻塞和不用都一样啊?
  • recvfrom阻塞时间长了,会不会导致服务端程序不灵活?
  • 如何linux 程序中启用其他进程,非阻塞,非popen
  • 无法阻塞信号的问题(附程序)
  • Java 进程执行外部程序造成阻塞的一种原因
  • Java基于Runtime调用外部程序出现阻塞的解决方法
  • 如何使用shell脚本实现监控程序消息队列阻塞情况?
  • Linux环境下aio例子程序,跑不出来,阻塞了
  • unp(3rd) 非阻塞connect Web客户程序,connect()无法成功
  • Linux网络抓包的程序 [使用recvfrom之后无限阻塞]
  • 大家帮忙看下这个非阻塞程序的代码哈
  • 测试服务器并发性能的客户端程序阻塞在 recv 函数处,大家帮忙看看什么原因?
  • 初级问题,socket(AF_INET, SOCK_STREAM, 0)是阻塞式还是非阻塞式?
  • 关于《Unix网络编程》在ubuntu 8.04下运行的问题,服务器端阻塞在accept调用,客户端阻塞在connect调用,导致连接失败
  • 关于socket编程中阻塞的问题
  • linux fwrite 阻塞问题
  • 关于fread是否会阻塞的问题
  • linux下socket的send函数阻塞问题?
  • socket编程,关于connect阻塞问题
  • linux socket fd 写阻塞问题
  • 关于线程阻塞的问题。。
  • 请问使用TCP/IP时,服务器阻塞的问题。(在线讨论)!!
  • 字符设备(串口) 阻塞 读的问题,很纳闷?????????
  • 非阻塞的socket的问题
  • 一个socket阻塞问题 ,请多多指教!!!(只剩下100分了)
  • 请教一下网络通讯非阻塞巨难的问题
  • 在线等待回音,请教各位同仁如何中断I/O阻塞问题
  • Linux线程阻塞问题 高手请进
  • [求助]关于SOCKET编程中close函数阻塞的问题。
  • 求助:阻塞socket在多线程情况下的防护问题
  • pthread 阻塞问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • select如何实现发送的阻塞和解除阻塞?
  • Linux下read函数默认到底是阻塞的还是非阻塞的?
  • 如何从阻塞式的read中取得阻塞了多少时间?
  • Select() 是否只能在非阻塞IO里使用,在阻塞IO里可以使用吗?
  • 请教sleep和pthread_delay_np:阻塞线程/阻塞进程?
  • recvfrom函数,已经设置好非阻塞模式,是否还存在阻塞的风险?
  • 怎么解除recvfrom阻塞的阻塞状态
  • linux 如何用SOCKET设置函数设置阻塞和非阻塞?
  • 非阻塞SOCKET,竟然也会阻塞?
  • 请教:线程中调用一个阻塞的方法后,进程及其它线程会阻塞么?
  • linux C socke编程 创建的socket默认是阻塞的还是非阻塞的?
  • 怎么样以非阻塞的方式从管道中读取数据?因为我用read函数时,如果管道没有数据就会阻塞住???
  • 请问:我发现在linux上的网络编程时, 若客户端连不上服务端,就会阻塞,但如果是在UNIX上,若连不上,会马上返回,并不阻 塞,怎样让它也能阻塞啊?
  • 关于非阻塞I/O
  • 如何判断一个线程是否处于阻塞状态
  • IP地址数字互转 iis7站长之家
  • 阻塞
  • solaris socket 非阻塞recv产生 EBADF 错误
  • 什么是非阻塞I/O?
  • select和非阻塞socket的迷惑


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3