05 2018 档案
摘要:主函数运行要去读取从标准输入或终端上输入的整个命令行,然后再去解析命令行参数,解析出来之后,要将其封装成一个 program,然后再将 program 放入 job 中,然后再去执行 job 中的命令行的内容。 17.1 job.o job.h 文件 job.c 文件 编译成 .o 文件 gcc -
阅读全文
摘要:16.1 设备特殊文件介绍 每个文件系统所在的存储设备都由主、次设备号表示,文件系统为设备文件 major 和 minor 这两个宏可用来获得主、次设备号。所有文件都由对应的主设备号和次设备号,可以通过 st_dev 加这两个宏获得 只有字符特殊文件和块特殊文件俺才有 st_rdev 值,其他的设备
阅读全文
摘要:15.1 目录操作函数 15.1.1 创建目录 函数说明: 该函数创建一个名为pathname的空目录,此目录自动含有 “.” 和 “..” 2 个登记项。这个新创建目录的用户 ID 被设置为调用进程的有效用户 ID,其组则为父目录的组 ID 或者进程的有效组 ID 若调用成功,mkdir 将更新该
阅读全文
摘要:14.1 文件时间 存在于 stat 结构体中 14.2 文件时间函数 14.2.1 介绍 utime(修改文件的存取时间和更改时间) 相关函数 utimes,stat 函数功能 更改文件的存取和修改时间 utime 会自动更新 st_ctime 的值 参数 buf 空指针:则取当前时间 进程的有效
阅读全文
摘要:13.1 软链接和硬链接介绍 13.1.1 软硬链接的创建 通过 ln 命令可以对文件创建软硬链接 创建硬链接 2 表示链接数 创建软链接 通过 ls -l 命令显示的文件类型为 l,表示文件类型为符号链接 若删除原始文件,对硬链接来说依然可以查看到文件内容,只不过链接数会减1,对软链接来说,则链接
阅读全文
摘要:12.1 Linux文件系统结构 12.1.1 文件操作基本元素 文件操作相关的最基本元素是:目录结构,索引节点和文件的数据本身 目录结构(目录项) 索引节点(i 节点) 文件的数据 目录结构(目录项) 索引节点(i 节点) 文件的数据 12.1.2 文件系统的三个区域 文件存在磁盘上分为三个区域:
阅读全文
摘要:11.3 truncate 和 ftruncate 函数 文件截短函数 11.3.1 函数介绍 改变文件大小的函数 相关函数 open 函数说明 在文件尾端处截去一些数据以缩短文件 将一个文件的长度截短为 0 是一个特例,用 O_TRUNC 标志可以做到这一点 如果该文件以前的长度大于 length
阅读全文
摘要:11.1 access 函数 11.1.1 函数介绍 access(判断是否具有存取文件的权限) 相关函数 stat,open,chmod,chown,setuid,setgid 函数说明 access()会检查是否可以读/写某一已存在的文件。 参数说明 @pathname:文件路径 access(
阅读全文
摘要:10.1 文件 10.1.1 文件属性 文件属性都存放在 stat 结构体中 10.1.2 文件属性操作函数 获取文件属性: 函数说明 stat()用来将参数file_name所指的文件状态,复制到参数buf所指的结构中。 fstat()用来将参数fildes所指的文件状态,复制到参数buf所指的结
阅读全文
摘要:例子如下: mystdio.h mystdio.c mystdio_test.c 编译调试:
阅读全文
摘要:8.1 存储映射介绍 8.1.1 概念 存储映射是一个磁盘文件与存储空间的一个缓存相映射,对缓存数据的读写就相应的完成了文件的读写。 文件操作部分映射到虚拟内存的一块区域,我们对虚拟内存映射的那块区域进行读写操作,读写之后,那块区域自动同步到文件当中。 4G空间分布: 共享内存映射区就是文件映射到的
阅读全文
摘要:7.1 I/O 处理方式 7.1.1 I/O处理的五种模型 阻塞I/O模型 若所调用的 I/O 函数没有完成相关的功能就会使进程挂起,直到相关数据到达才会返回。如 终端、网络设备的访问。 非阻塞模型 当请求的 I/O 操作不能完成时,则不让进程休眠,而且返回一个错误。如 open read writ
阅读全文
摘要:6.1 fcntl 函数 6.1.1 函数介绍 函数说明:fcntl()用来操作文件描述词的一些特性。 函数功能:可以改变已经打开文件的性质 参数说明 @fd:代表欲设置的文件描述符 @cmd:代表欲操作的指令。有以下几种情况: F_DUPFD:用来查找大于或等于参数 arg 的最小且仍未使用的文件
阅读全文
摘要:5.1 dup 函数 复制文件描述符 5.1.1 简单cat实现及输入输出重定向 io.c cat.c 编译:gcc -o bin/cat -Iinclude src/io.c src/cat.c 调试: cat 的作用就输入和输出的重定向功能,而 dup 和 dup2 就是用来完成此功能的。 5.
阅读全文
摘要:4.1 缓存 buff 说明 一般设置缓存 buff 的大小是由一定的规律的,就是根据磁盘块的大小来定。 Linux下输入命令: df -k 查看磁盘 可以用命令查看下 /dev/sda1 磁盘的磁盘说明 Block size 就是磁盘块的大小,这个磁盘块的大小为 4M ,那么就可以设置缓存 buf
阅读全文
摘要:3.2.4 read 函数 读文件 read(由已打开的文件读取数据) * 函数说明 read() 会把参数 fd 所指的文件传送 count 个字节到 buf 指针所指的内存中。 若参数 count 为0,则 read() 不会有作用并返回0. 返回值为实际读取到的字节数,如果返回0,表示已到达文
阅读全文
摘要:3.1 文件描述符 文件IO 系统调用是不带缓存的,文件 I/O 系统调用不是 ANSI C 的组成部分,是 POSIX 的组成部分。 系统调用与C库: C库函数的IO 的底层还是调用系统调用 I/O。 需要运行速度很快的时候采用 文件IO系统调用。 FILE 结构体中有 文件描述符成员 fd,标准
阅读全文
摘要:2.1 系统调用 2.1.1 概念 所谓系统调用(system call)是指曹错系统提供给用户程序的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的特殊服务。 应用程序可以直接调用系统调用获得内核的服务 shell 可以调用系统调用 标准C库,也可以调用系统调用,获得内核
阅读全文
摘要:1.1 进程在虚拟空间中的布局 32位的操作系统虚拟空间的大小为 4GB,即每个进程在系统中分配的虚拟空间大小为4GB。这4GB的大小被分为了两个部分: 内核空间:1GB,内核起的进程 用户空间:3GB,主要是普通用户起的进程 物理内存和虚拟内存之间的交互: 虚拟地址和物理地址通过 CPU 的内存管
阅读全文