- 论坛徽章:
- 2
|
我写了两段代码如下,两段代码只有注释掉的两行代码的区别,一个在aio_error返回0是调用了aio_return,另一个没有调用。执行的结果是调用aio_return的aio_error就会返回错误码22,没调用aio_return的sleep一次后aio_error返回0。为什么“aio_return这一句还没有执行到的代码会对aio_error的返回值造成影响呢?或者说为什么还没有调用aio_return,就会影响异步IO的操作呢?”,请了解的人帮忙,多谢。
第一段- int main()
- {
- struct aiocb aio;
- int fd = open("text", O_RDONLY);
- aio.aio_fildes = fd;
- aio.aio_offset = 0;
- aio.aio_buf = new char[30];
- memset((char*)aio.aio_buf, 0, 30);
- aio.aio_nbytes = 30;
- aio.aio_reqprio = 0;
- if (aio_read(&aio) < 0) {
- printf("read fail.\n");
- }
- printf("aio_read end.\n");
- while (true) {
- int rlt = aio_error(&aio);
- if (rlt == 0) {
- ssize_t s = aio_return(&aio);
- printf("result:\n%d\n", s);
- printf("content:\n%s\n", aio.aio_buf);
- break;
- }
- else if (rlt == EINPROGRESS) {
- printf("read is still awaiting, sleeping for 1s.\n");
- sleep(1);
- continue;
- }
- else if (rlt == -1) {
- printf("aio_read error, rlt: -1.\n");
- break;
- }
- else {
- printf("aio_read error, rlt: %d.\n", rlt);
- break;
- }
- }
- return 0;
- }
复制代码 第二段- int main()
- {
- struct aiocb aio;
- int fd = open("text", O_RDONLY);
- aio.aio_fildes = fd;
- aio.aio_offset = 0;
- aio.aio_buf = new char[30];
- memset((char*)aio.aio_buf, 0, 30);
- aio.aio_nbytes = 30;
- aio.aio_reqprio = 0;
- if (aio_read(&aio) < 0) {
- printf("read fail.\n");
- }
- printf("aio_read end.\n");
- while (true) {
- int rlt = aio_error(&aio);
- if (rlt == 0) {
- //ssize_t s = aio_return(&aio);
- //printf("result:\n%d\n", s);
- printf("content:\n%s\n", aio.aio_buf);
- break;
- }
- else if (rlt == EINPROGRESS) {
- printf("read is still awaiting, sleeping for 1s.\n");
- sleep(1);
- continue;
- }
- else if (rlt == -1) {
- printf("aio_read error, rlt: -1.\n");
- break;
- }
- else {
- printf("aio_read error, rlt: %d.\n", rlt);
- break;
- }
- }
- return 0;
- }
复制代码 |
|