学习笔记
20191318 王泽文
《Unix/Linux系统编程》
第七章 文件操作
本章主要讲述讨论了多种文件系统;解释了操作系统中的各种操作级别,系统性概述了各种操作,介绍了Linux系统的EXT2文件系统。
文件操作级别包括:
- 硬件级别
- 操作系统内核中的文件系统函数
- 系统调用
- 文件流上的I/O库函数
- 用户命令
- 各种操作的sh脚本
在低级别的文件操作中,主要学习了分区和格式化分区。分区指的是一个块存储设备, 如硬盘、U盘、SD卡等,可以分为几个逻辑单元。学习了磁盘分区、显示分区表的程序、文件系统的格式化分区以及挂载磁盘分区;
接着,还了解了EXT2文件系统,包括EXT2文件系统的系统数据结构、显示超级块、组描述符、块和索引节点位图以及目录内容的程序
第八章 使用系统调用进行文件操作
本章主要讲述如何使用系统调用进行文件操作。
系统调用是一种允许进程进入Kmode(内核模式)以执行Umode(用户模式)不允许操作的机制。复刻子进程、修改执行映像,甚至是终止等操作都必须在内核中执行。
系统调用手册页,使用man 2 NAME
可以用来显示系统调用手册页。
简单的系统调用:
access : int access(char *pathname,int mode);
检查对某个文件的权限chdir : int chdir(const char *path);
更改目录chmod:int chmod{char *path, mode_t mode);
更改某个文件的权限chown : int chown(char *name, int uid, int gid);
更改文件所有人chroot: int chroot(char *pathname);
将(逻辑)根目录更改为路径名getcwd: char *getcwd(char *buf, int size);
获取 CWD 的绝对路径名mkdir: int mkdir(char *pathname, mode_t mode)
创建目录rmdir: int rmdir(char *pathname);
移除目录(必须为空)link: int link(char *oldpath, char *newpath);
将新文件名硬链接到旧文件名unlink: int unlink(char *pathname);
减少文件的链接数;如呆链接数达到 0, 则删除文件symlink: int sym1ink(char *o1dpath, char *newpath);
为文件创建一个符号链接rename: int rename(char *o1dpath, char *newpath);
更改文件名称utime: int utime(char *pathname, struct utimebuf *time)
更改文件的访间和修改时间
以下系统调用需要超级用户权限。
mount: int mount(char *specialfile, char •mountDir);
将文件系统添加到挂载点目录上urnount: int umount(char *dir);
分离挂载的文件系统mknod: int mknod(char *path, int mode, int device);
创建特殊文件
常用的文件操作的系统调用:
stat
: 获取文件状态信息open
: 打开一个文件进行读、写、追加close
: 关闭打开的文件描述符read
: 读取打开的文件描述符write
: 写入打开的文件描述符lseek
: 重新定位文件描述符的读/写偏移量dup
: 将文件描述符复制到可用的最小描述符编号中dup2
: 将oldfd复制到newfd中,如果newfd己打开,先将其关闭link
: 将新文件硬链接到旧文件unlink
: 取消某个文件的链接;如果文件链接数为0,则删除文件int unlink(char *pathname)symlink
: 创建一个符号链接readlink
: 读取符号链接文件的内容umask
: 设置文件创建掩码;文件权限为(mask& -umask)
编程实践
在这里进行了myls编程实践,但是在调试的过程中并没有把代码调试成功
课堂学习
在课堂的学习中,我学习了man手册的使用和sort指令的使用,学习到了在不清楚Linux指令的使用时可以用man -k 来获取帮助。也了解到了cheat的使用也能给我的系统指令学习带来帮助。