外壳函数和系统调用

__GLIBC__``__GLIBC_MINOR__可以确认编译时的glibc版本

函数gnu_get_libc_version()可以确认运行时的glibc版本

open中的flag参数分为三组

文件访问模式(三选一):读,写,读写

状态标志:如O_SYNC

ioctl用来进行通用IO操作之外的特定操作

fnctl 控制fd

获取/设置某个fd的访问模式和状态标志

复制fd

这里vnode中的inode是磁盘上inode的内存镜像

思考

何时同一个进程内会有两个fd指向同一个open file,何时在不同进程中会这样 何时两个open file指向同一个vnode

进程级的fd表

open file descriptor

只有close-on-exec是进程私有的标志,存在进程级fd表中

其他标志(如O_APPEND)为系统级

系统级的打开文件表

open file description

存放打开文件句柄

其中记录偏移,标志等

文件系统级的inode表

重定向语法2>&1使得标准错误(文件描述符2)重定向到标准输出(文件描述符1),文件描述符1和2共享打开文件句柄

进程专有的/dev/fd/n(n是fd编号)目录

打开这种文件相当于复制(dup)fd

argv和environ及它们指向的字符串,生命周期长

可通过/proc/PID/cmdline和/proc/PID/environ访问

进程可以通过/proc/self访问自己

longjump一般用来从调用栈的深处,直接跳转回浅层,这之间的所有栈被剥离stack unwinding

不能反向,跳转回一个已经返回了的函数

setjmp只保存了有限的信息,如栈指针和程序计数器等