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

Linux环境下aio例子程序,跑不出来,阻塞了

    来源: 互联网  发布时间:2016-10-21

    本文导语:  我创建了两个fifo文件。编译了一个aio调用的例子,启动程序, 然后再开两个终端,用echo命令去>>到这两个fifo文件。 观察到,a.out和两个echo命令都处于了阻塞状态。 这到底是为什么呢? 请大牛指点一下。谢谢。 #in...

我创建了两个fifo文件。编译了一个aio调用的例子,启动程序,
然后再开两个终端,用echo命令去>>到这两个fifo文件。

观察到,a.out和两个echo命令都处于了阻塞状态。
这到底是为什么呢? 请大牛指点一下。谢谢。


#include
#include
#include
#include
#include
#include
#include
#include
char buf[20]={0};
int f(const char* fifo){
  unlink(fifo);
  mkfifo(fifo,0666);
  return open(fifo,O_RDWR|O_NONBLOCK);
}
extern "C" void aio_completion_handler(int signo, siginfo_t *info, void *context){
  struct aiocb *req;
  if(SIGIO==info->si_signo){
    req=(struct aiocb*)info->si_value.sival_ptr;
    if(0==aio_error(req)) printf("ret=%d,buf=%sn",aio_return(req),(*req).aio_buf);
  }
}
void g(int fd){
  struct aiocb cb={0};
  cb.aio_fildes=fd;
  cb.aio_buf=malloc(21);
  cb.aio_nbytes=20;
  cb.aio_offset=0;

  cb.aio_sigevent.sigev_notify=SIGEV_SIGNAL;
  cb.aio_sigevent.sigev_signo=SIGIO;
  cb.aio_sigevent.sigev_value.sival_ptr=&cb;

  struct sigaction act,oact;
  sigemptyset(&act.sa_mask);
  act.sa_flags=SA_SIGINFO;
  act.sa_sigaction=aio_completion_handler;
  sigaction(SIGIO,&act,&oact);
  aio_read(&cb);
}
int main(void){
  int fd1=f("myfifo1");
  int fd2=f("myfifo2");
  if(!(fd1||fd2))return 1;
  if(fd1)g(fd1);
  if(fd2)g(fd2);
  while(1)sleep(1);
  close(fd1);
  close(fd2);
  return 0;
}

|
使用异步 I/O 大大提高应用程序的性能
http://www.ibm.com/developerworks/cn/linux/l-async/

    
 
 

您可能感兴趣的文章:

  • Linux下read函数默认到底是阻塞的还是非阻塞的?
  • linux 如何用SOCKET设置函数设置阻塞和非阻塞?
  • linux C socke编程 创建的socket默认是阻塞的还是非阻塞的?
  • 请问:我发现在linux上的网络编程时, 若客户端连不上服务端,就会阻塞,但如果是在UNIX上,若连不上,会马上返回,并不阻 塞,怎样让它也能阻塞啊?
  • linux fwrite 阻塞问题
  • linux多线程无法进行阻塞方式的读写操作
  • linux下socket的send函数阻塞问题?
  • Linux里的pthread_create会不会阻塞啊?
  • linux socket fd 写阻塞问题
  • Linux系统刚启动起来的时候为什么会阻塞一下?
  • linux shell如何非阻塞写命名管道
  • linux sem_wait 为什么会阻塞进程?
  • linux下消息队列不阻塞
  • 如何linux 程序中启用其他进程,非阻塞,非popen
  • Linux线程阻塞问题 高手请进
  • linux多线程无法进行阻塞方式的读写操作?
  • linux下如何设置一个socket为非阻塞方式?
  • 在Linux下如何等待线程终止,又不会阻塞
  • linux下的非阻塞读取
  • linux epoll的ET模式和LT模式的主要区别是什么呢?为什么ET模式一定要用非阻塞socket?
  • 如何编译Linux Device Driver中的例子
  • 哪里可以找到linux下的TCP/UDP/IP编程教程和例子?
  • 给点linux下的c程序的简单例子
  • Linux设备驱动(第三版)- 字符设备驱动 - 例子
  • 关于linux设备驱动的第一个例子
  • 谁有完整的java在linux下读excel的完整下载包URL,例子,文档,很急!!!!多少分都行
  • 谁能给一个linux/unix下多线程同步的例子
  • 求个linux多线程编程的例子,要有线程池的 通用些更好
  • 我想学c/s模式的linux网络编程,那位同志可以推荐一下几个成功例子呢?谢谢!
  • 求linux开机自动运行用户程序脚本例子!在线等
  • UNIX环境高级编程的例子可以在LINUX下调试吗?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 【linux文件操作的怪问题】写完文件关闭后立即打开,读出来的是乱码。sleep(1)读出来后正常
  • 请问Linux的高效如何体现出来
  • windows 2000 访问linux下smaba时候 2G以上大小的文件显示出来的大小很奇怪
  • redhat linux 下文件名是汉字的怎样显示出来!!
  • Linux 的网络启动不了如何把文件copy出来啊?
  • 急!Linux进不去了,但里面有重要文件,怎么才能拷出来
  • 在linux下有没办法使开发出来的库不能通过nm查看接口
  • 能否从某个Window分区中分一块出来安装Linux啊?在线等待。。。
  • 偶托管了一管台linux主机,想分配一个用户出来自已用,请问该怎么做?
  • linux rh 的8.0要出来了哈~~~~~~~~~~~
  • 有什么方法可以吧linux里面的nano里写的文件拷贝出来吗?
  • 请问,在linux下面,用什么样的函数才能将进程信息读出来??急急
  • 我的redhat linux 9系统启动不了啦,怎么把数据弄出来啊?
  • Win2000中自动显示出来了Linux的盘符
  • linux下mencoder 转视频转出来的都是0字节```有没有人遇到这个问题```
  • 有谁知道Flash for linux出来没有?
  • 各位大虾救命啊,我的镭7500显卡linux7.0认不出来,怎么办?
  • 在Redhat Linux 7.3下插上U盘后,为什么认不出来?
  • linux 下如何取出一个分区的类型(不是查看而是要在我的程序中判断出来)
  • linux的垃圾箱不小心被删除了,怎么让他重新显示出来
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载


  • 站内导航:


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

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

    浙ICP备11055608号-3