我开始认识到笔记有2个部分
1. 总结知识点,将知识以简洁有序的方式呈现出来(也是学习过程的一个重要部分)。把书读薄
2. 考虑书中的细节,做讨论,还是把结果适度(该简洁的简洁,该详细的详细)地呈现出来。把书读厚
原则上知识获取的过程以及结果的表示可以通过文字记录下来。
这里先读薄,摘要点。
第一章 UNIX基础知识
1. 高级语言的运行与底层(操作系统,计算机机器指令&硬件)有关,可以研究下一个C程序是具体怎么在linux环境下编译的,又是怎么运行的来加深理解。
从操作系统来看,可以理解为:它为上层提供了一个 系统调用=system call 的接口。
LINUX具体的,system-call上又建立了库函数,system-call与库函数可以认为共同构建了UNIX的编程环境。
2. UNIX标准化以及实现
信息量有些大,我试着总结下:
i)主要的标准有
ANSI C(ANSI 是美国标准化组织,是OSI的成员),有24个区
IEEE: POSIX,是ANSI C的超集,是操作系统的接口定义(可以看到C是一种面向机器的系统级语言),除了ANSI C之外
主要包含必需,XSI扩展,可选3种头文件。
Open Group: SUS(Single UNIX Specification),Open Group 拥有Unix的商标,现在一般认为SUS是POSIX的超集。
ii)Unix系统实现
出现了一个“限制”的概念,在SUS前提下某具体UNIX系统对可变的“限制”提供了具体的回答。
函数sysconf,pathconf,fpathconf查找限定值。
3. 文件I/O
核心概念是进程的task_struct包含struct files_struct *files,files_struct则包含许多文件表项(int 文件描述符,* file结构体)files_struct维护着打开的文件(一个文件也可以多次打开),file结构体则维护打开的相关信息比如文件对象inode指针,文件打开方式,文件偏移。
files_struct=(int i, file_open)------->file_open=(mode,offset,link_to_file)
相关的函数操作有open,creat,close,lseek,read,write,dup/dup2(新建文件打开指向同个file_open),sync/fsync/fdatasync(缓存操作),fcntl(改变打开文件的属性),ioctl(其他函数)。
4. 文件与目录