外壳函数和系统调用

__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只保存了有限的信息,如栈指针和程序计数器等