工作代码片段-aio

55 篇文章 0 订阅

aio是linux上的异步IO实现,具体测试代码如下:

    aiocb ab;
    bzero( (char *)&ab, sizeof(struct aiocb) );
    int fd = open("a.txt", O_RDWR | O_APPEND);
    ab.aio_buf = malloc(201);
    ab.aio_fildes = fd;
    ab.aio_nbytes = 20;
    ab.aio_offset = 0;
    int r = aio_read(&ab);
    std::cout << "return:" << r << std::endl;
    std::cout << "buff:" << (char *)ab.aio_buf << std::endl;
    r = aio_return(&ab);
    std::cout << "return:" << r << std::endl;
    char *b = "good boy!!";
    ab.aio_buf = b;
    aio_write(&ab);

关键点在于,struct aiocb结构体的填充。

aio通知机制:

信号

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

线程

  acb.aio_sigevent.sigev_notify = SIGEV_THREAD;
  acb.aio_sigevent._sigev_un._sigev_thread._function = rw;
  acb.aio_sigevent._sigev_un._sigev_thread._attribute = NULL;
  acb.aio_sigevent.sigev_value.sival_ptr = &acb;
可能因为不同版本的头文件提供的接口有所不同,网上有些资料说的是acb.aio_sigevent.notify_function,但我在实际应用中没有找到他的定义。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值