【APUE】文件I/O】的更多相关文章

文件 IO 记录书中的重要知识和思考实践部分 Unix 每个文件都对应一个文件描述符(file descriptor),为一个非负整数,一个文件可以有多个fd, 后面所有与文件(设备,套接字等)有关操作都是围绕这个fd来的. 在shell中 < > 都为重定向符号,前者为重定向输入,后者为输出. 文件的打开 #include <fcntl.h> int open(const char *path, int flags, ... /* mode_t mode */); int ope…
文件操作相关 API:open, read, write, lseek, close. 多进程共享文件的相关 API:dup, dup2, fcntl, sync, fsync, ioctl. 文件操作 API open and openat 函数原型: #include <fcntl.h> int open(const char *path, int oflag, ... /* mode_t mode */ ); int openat(int fd, const char *path, in…
空洞的概念 linux 上普通文件的大小与占用空间是两个概念,前者表示文件中数据的长度,后者表示数据占用的磁盘空间,通常后者大于前者,因为需要一些额外的空间用来记录文件的某些统计信息或附加信息.以及切分为块的数据信息 (通常不会占用太多).文件占用空间也可以小于文件尺寸,此时文件内部就存在空洞了. 所谓空洞其实就是没有分配存储空间的数据块,当访问这些数据块时,系统返回 0,就如同读到空文件一般,当写这些块时,系统再实地分配对应的存储空间.其实这个和内存中的虚址地址与物理地址的概念非常相似--操作…
一.mkdir和rmdir函数 #include <sys/types.h> #include <sys/stat.h> int mkdir(const char *pathname, mode_t mode); 返回值:成功0,失败-1. mkdir函数创建一个空目录,.和..目录是自动创建的.所指定的文件存取许可权mode由进程的文件方式创建屏蔽字修改(命令行执行umask可查看) 常见的错误是指定与文件相同的mode(只指定读,写许可权).但是对于目录来说必须设置一个执行许可…
一.link.unlink.remove和rename 一个文件可以有多个目录项指向其i节点.使用link函数可以创建一个指向现存文件连接 #include <unistd.h> int link(const char *existingpath, const char *newpath); 返回值:成功为0,出错为-1 该函数创建一个新目录项newpath,指向现存文件existingpath,如果newpath已存在则返回出错. 为了删除一个现存的目录项,可以调用unlnk函数. #inc…
一.文件权限 1. 各种ID 我在读这一章时遇到了各种ID,根据名字完全不清楚什么意思,幸好看到了这篇文章,http://blog.csdn.net/ccjjnn19890720/article/details/6990656,总结一下 每一个进程其实对应了6个以上的ID,它们分别是:实际用户ID.实际组ID(我们实际上是谁,执行这个程序的用户和组),有效用户ID.有效组ID.附加组ID(用于文件访问权限检查),保存设置用户ID,保存设置组ID(由exec函数保存) 实际用户ID/实际组ID:当…
文件和目录 Unix 所有的文件都对应一个 struct stat,包含了一个文件所有的信息. #include <sys/stat.h> struct stat { mode_t st_mode; // 文件类型和用户访问权限 ino_t st_ino; // inode 号 dev_t st_dev; // 文件系统设备号 dev_t st_rdev; // 特殊文件设备号 nlink_t st_nlink; // 链接(引用)计数,这个指对inode的链接数 uid_t st_uid;…
粘着位(Sticky Bit) S_ISVTX位被称为粘着位.如果一个可执行程序文件的这一位被设置了,程序第一次运行完之后,程序的正文部分的一个副本仍被保存在交换区(程序的正文部分是机器指令).这使得下次执行该程序能更快的被载入内存.因为在通常的UNIX文件系统中,文件的各数据块很可能是随机存放的,相比较,交换区是被作为一个连续文件来处理的. 现在较新的UNIX系统配置了虚拟存储系统以及快速文件系统,很少再给普通文件设置粘着位. 现在的系统还支持对目录设置粘着位.如果对一个目录设置了粘着位,那么…
从开始看APUE已经有快一个星期了,由于正好赶上这几天清明节放假,难得有了三天空闲假期可以不受打扰的学习APUE,现在已经看完前六章了,里面的大部分例程也都亲自编写,调试过了.但总觉得这样学过就忘,因此决定把这个学习过程记录下来,学到后面章节的时候回顾前面的章节,做到温故知新.也可以将自己在学习过程中遇到的问题记录下来. 本书对UNIX系统的提供的接口的方方面面进行了讲解,中间还穿插介绍了很多UNIX或类UNIX系统的相关知识,即使现在我只是看过了前六章,也感觉学到了不少知识,解决了我以前对LI…
配置apue的头文件apue.h和unp的头文件anp.h 如果要使用gcc -g 来生成可调试文件一定要修改Make.defines.linux文件中的CFLAGS变量 修改为:CFLAGS=-ansi -I$(ROOT)/include -Wall -DLINUX -D_GNU_SOURCE $(EXTRA) -g…