不知道这是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