运行环境:
Linux thinkhy-laptop 2.6.22-14-generic #1 SMP Tue Feb 12 07:42:25 UTC 2008 i686 GNU/Linux
线程模型:posix
gcc 版本 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)
1. p375 14.4 STREAMS
sys/conf.h在Linux 中缺失,实际上程序14-9忽略这个头文件也可以运行。
=================================================================
14-9 运行结果:
who thinkhy tty7 2009-01-07 18:09 (:0)
thinkhy pts/0 2009-01-07 21:39 (:0.0)
thinkhy@thinkhy-laptop:~/work/apue.2e/advio$ sudo ./14-9 /dev/pts/0
/dev/pts/0 is not a stream
thinkhy@thinkhy-laptop:~/work/apue.2e/advio$ sudo ./14-9 /dev/tty7
/dev/tty7 is not a stream
tty7与pts/0都不是流设备,怪了!
==================================================================
14-10运行结果:
thinkhy@thinkhy-laptop:~/work/apue.2e/advio$ sudo echo hello, world|./catgetmsg
getmsg error: Function not implemented Linux 2.6.22-14-generic居然没有实现getmsg 书中是在Solaris上演示的。
==========================================================
14.4节暂时未看懂,先略过。
什么叫作流?
============================================================================
CSAPP中文版 P743 check_clients函数 21 注释: EOF detected.,remove descriptor from pool
问题是什么时候会出现EOF? 知道了,原来是客户端主动关闭它的连接端,服务端就可以检测到EOF。
=============================================================
APUE14.8节实现了两个函数:readn和writen,以满足对FIFO、终端、网络和STREAM设备的读写。
这些设备都满足这两个性质:
1> 一次read操作所返回的数据可能少于所要求的数据。
2> 一次write操作的返回值也可能少于指定输出的字节数。
390页的这两段代码看似不错,实际上都有问题。
CSAPP11.4.1也实现两个类似的函数:rio_readn和rio_writen,两者的比较在另一篇文章。
====================================================
14-12表述不对!
14-12.c
thinkhy@thinkhy-laptop:~/work/apue.2e/advio$ time ./mcopy /winD/film/kongfuxiongmao.rmvb k.rm
real 0m32.683s
user 0m0.228s
sys 0m1.160s
thinkhy@thinkhy-laptop:~/work/apue.2e/advio$ time ./read </winD/film/kongfuxiongmao.rmvb >test.rm
real 0m27.864s
user 0m0.036s
sys 0m2.276s
thinkhy@thinkhy-laptop:~/work/apue.2e/advio$ time ./mcopy /winD/film/kongfuxiongmao.rmvb test.rm
real 0m31.267s
user 0m0.268s
sys 0m1.000s
==========================================================
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
}
===========================================================
p703 Ex14.8 C-14.c v
Linux 2.6.22 65536
============================================================
习题14.3有点疑惑
============================================================
O_RDONLY定义在头文件fcntl.h中
============================================================
遇到一个调试错误:
Program received signal SIGSEGV, Segmentation fault.
0x0804871b in main (argc=1, argv=Cannot access memory at address 0xb9a352e0
) at ex14-9.c:7
7 #include <sys/stat.h>
================================================================================
14.4 STREAMS 没看懂
=========================================================
上水木问怎样让grep 的第二个参数支持正则表达式
grep xx dir dir支持正则表达式