MacOSX(类FreeBSD?)的坑
来源:互联网 发布:win10 数据恢复 编辑:程序博客网 时间:2024/05/19 22:57
不知道这是bug还是缺陷:/dev/tty为当前控制台,所以,echo "hello world" > /dev/tty 都能在控制台(伪终端)打印出 hello world 字符,那么我们写个程序输出到标准输出文件描述符STDOUT_FILENO(:=1)时,在控制台重定位如上面那句命令行一样,应该也能输出到控制台。可惜的是,这似乎对于POSIX AIO并不成立,如下程序在Linux下都能成功,但是在MacOSX下就失败。我们编译并重定向这个程序(这个得有APUE头文件和库文件),./a.out >/dev/tty 竟然是:
w???Input/output error: Undefined error: 0
也就是说在aio_error中失败了。但是同样的程序可以在Linux下成功,后来在MacOSX下重定向为/dev/ttys001,同样,虽然能够输出但是在aio_suspend中失败了。
看来异步IO的操作系统底层支持度还是非常不一样的。(Ubuntu中需要连接 -lrt编译,而MacOSX下无需多余连接)
#include "apue.h"#include <ctype.h>#include <fcntl.h>#include <aio.h>#include <errno.h>char buf[100];const struct aiocb * list[1];int main(int argc, char const *argv[]){ int a = 'a'; int res; for (int i = 0; i < 10; ++i) { /* code */ buf[i] = a; a++; } struct aiocb ab; ab.aio_fildes = 1; ab.aio_offset = 0; ab.aio_buf = buf; ab.aio_nbytes = 1; ab.aio_sigevent.sigev_notify = SIGEV_NONE; list[0] = &ab;AGAIN: if(aio_write(&ab)<0) err_sys("aio write error");CHECK: if((res = aio_error(&ab) )!= 0) { if(res != EINPROGRESS) err_sys("w???%s",strerror(res)); goto CHECK; } if((res = aio_return(&ab) ) < 0 ) { fprintf(stderr, "write :%d\n", res); goto AGAIN; } if(aio_suspend(list, 1, NULL) < 0 ) err_sys("aio suspend error"); fprintf(stderr,"ok\n"); return 0;}
0 0
- MacOSX(类FreeBSD?)的坑
- MacOSX的tree命令
- MacOSX下比较有用的技巧(不断更新)
- 设计MacosX的Fuzzer(1)
- macosx 下oracle10g的下载
- MacOSX Leopard 下GUI环境变量的设置
- MacOSX下网页Widget的做法
- MacOSX配置基于Makefile的工程
- MacOSX下一个崩溃案例的分析
- MacOSX编译coreutils出错的修改
- MacOSX编译coreutils出错的修改
- MacOSX和Windows 8的完美融合
- MacOSX上那些有用的小插件
- MacOSX 编译Android 4.0的各种问题
- MacOSX交叉编译Win_x86的GoLang程序
- Homebrew:MacOSX上的软件管理软件
- MacOSX上的NFS文件共享
- FreeBSD与Linux的特点(转)
- 装饰模式
- word中实现文献引用
- solr的相关操作(addDocument,flush,commit,rollback,optimize,close)解析
- js正则全局匹配时获取捕获组
- 想成为程序员,这些技能不能少
- MacOSX(类FreeBSD?)的坑
- weex初尝试
- linux驱动调试的一下特殊知识点
- 北理2017校赛
- 链表的测试
- 自定义SlidingMenu
- 卡片效果CardView
- SpringBean的生命周期
- c语言5.14