重读APUE(3)-dup与文件表项】的更多相关文章

下图为调用dup之后的文件指针状态,包含如下信息: 1. dup选择了一个最小的未使用的描述符3: 2. dup(1)之后,描述符1和描述符3指向同一个文件表项: 3. dup(1)的返回值即为复制得到的描述符3: 4. 补充dup2,dup2可以指定复制的目标描述符,如果该描述符与被复制的描述符相同,会直接返回该描述符:如果不同,则会先关闭描述符,然后进行复制:注意,dup2的关闭和复制操作是原子的: 5. 补充open,进程每一次open调用都会打开一个新的文件表项,一个新的描述符指向这个文…
转自  http://blog.csdn.net/gzzheyi/article/details/7739556 表格可以参见APUE 第三版 P61. 文件描述符(进程级别): 1).在每个进程表中都有一个记录项,记录项中包含有一张打开文件描述符表,可将其视察为一个矢量(数组),每个描述符占用一项.与每个文件描述符相关联的是: (a).文件描述符标志. (b).指向一个文件表项的指针.(不同的文件描述符可以指向同一个文件表项,例如用dup函数复制文件描述符,得到一个新的文件描述符,但是它们指向…
内核使用3种数据结构表示打开的文件,他们之间的关系决定了在文件共享方面一个进程对另一个进程的影响. (1) 每个进程在进程表中都有一个纪录项,纪录项中包含一张打开文件描述符表,每个文件描述符各占一项,与每个文件描述符相关的是 a. 文件描述符标志 b. 指向一个文件表项的指针 (2) 内核为所有打开文件维护一张文件表项,每个文件表项包含: a. 文件状态(读 写 同步 非阻塞等) b. 当前文件偏移量 c. 指向改文件V节点(i节点)的指针 (3) 没打开一个文件或设备,都有一个V节点结构,V节…
lienhua342014-08-23 UNIX 提供了两个函数 dup 和 dup2 用于复制一个现存的文件描述符. #include <unistd.h> int dup(int filedes); int dup2(int filedes, int filedes2); 返回值:若成功则返回新的文件描述符,如出错则返回-1. 由 dup 函数返回的文件描述符一定是当前可用文件描述符中的最小描述符.用 dup2 函数则可以通过参数 filedes2 指定目标文件描述符.如果filedes2…
十二.函数sync.fsync和fdatasync 延迟写:传统的Unix系统在内核中设有缓冲区或页高速缓冲,大多数磁盘I/O都通过缓冲区进行,当我们向文件写入数据时,内核通常先将数据复制到缓冲区,然后排入队列,晚些时候再写入磁盘.Unix系统提供了sync.fsync和fdatasync三个函数. #include <unistd.h> int fsync(inf fd); int fdatasync(int fd); //若成功,返回0:若出错,返回-1 void sync(void);…
七.函数write #include <unistd.h> size_t write(int fd, const void *buf, size_t nbytes); //若成功,返回已写字节数:若出错,返回-1 对于普通文件,写操作从文件的当前偏移量处开始.如果在打开文件时,制订了O_APPEND选项,则在每次写操作前,将文件偏移量设在文件的当前结尾处.在一次成功之后,该文件偏移量增加实际写的字节数. 八.I/O的效率 大多数文件系统为改善性能都采用某种预读(read ahead)技术.当检…
1. 文件I/O 对于内核而言,所有打开的文件都通过文件描述符引用,内核不区分文本文件和二进制文件 open函数:O_RDONLY  O_WRONLY  O_RDWR create函数: close函数:关闭一个文件时还会释放该进程加在该文件上的所有记录锁 lseek函数:显式地为一个打开的文件设置其偏移量 每个打开的文件都有一个与其相关联的 "当前文件偏移量",用以度量从文件开始处计算的字节数,通常,读.写操作都从当前文件偏移量处开始,并使偏移量增加所读写的字节数 文件偏移量可以大于…
1 引言 本章首先讨论Unix系统中大多数文件I/O最常用的5个系统函数:open.read.write.lseek以及close. 本章所说明的函数又被成为不带缓冲的I/O,不带缓冲是指每个read和write都调用内核中的一个系统调用. 接着讨论原子操作的概念,只要涉及到多个进程之间共享资源,原子操作相当重要. 最后,本章将进一步讨论在多个进程之间共享文件以及所涉及的内核数据结构,之后将说明dup.fcntl.sync.fsync和ioctl函数. 2 文件描述符 对于内核而言,所有的打开的…
简介 添加注册表项是实现文件自启动的经典方法之一,但因为操作注册表项是一个敏感操作,被报毒可能性较大,但即便如此,这个方法还是值得一学的,因为后期大部分编程都涉及到注册表操作. 最常使用到的注册表项有两项: "HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows"将"load"键下的键值改为自启动目标文件路径,但缺点在于只能支持一个程序: "HKEY_LOCAL_MACH…
注册表的用途与设置 注册表是windows的核心,里面储存着大量的系统信息,说白了就是一个庞大的数据库.如果你不懂什么是数据库,那没关系,不影响你了解注册表,不过最好对数据库有所了解.注册表里面所有的信息平时都是由windows操作系统自主管理的,也可以通过软件或手工修改.注册表里面有很多系统的重要信息,包括外设,驱动程序,软件,用户记录等等,注册表在很大程度上“指挥”电脑怎样工作.注册表有很大的用处,功能非常强大,是windows的核心.通过修改注册表,我们可以对系统进行限制.优化等等.比如我…