文件I/O - UNIX环境高级编程-第3章
2014-09-26 15:06
176 查看
>>-----基本的系统数据类型<<
>>------------------------第3章 文件IO--------------------------------<<
open函数:
int open(const char *pathname, int oflag, ... )//返回值:成功返回文件描述符,出错-1
creat函数:
int creat(const char *pathname, mode_t mode); //返回值:成功只写打开的文件描述符,出错-1
close函数:
int close(int filedes); //返回值:成功0,失败-1
当一个进程终止时,内核自动关闭它所有打开的文件。
lseek函数:
off_t lseek(int filedes, off_t offset, int whence);//返回值:成功为新文件偏移量,出错-1
偏移量可能是负值,比较它的返回值时,不要测试是否小于0,要测试是否等于-1
read函数:
ssize_t read(int filedes, void *buf, size_t nbytes);//返回值:成功返回读到的字节数,已到文件尾返回0,出错返回-1
1.读普通文件时,在读到要求字节之前就读到文件尾,例如在到达文件尾前还有30个字节,而要求读100个字节,则read返回30,下次再调用read,它返回0
write函数:
ssize_t write(itn filedes, const void *buf, size_t nbytes);//返回值:成功返回已写字节数,出错-1
>>--------------------------------------------------IO的效率----------------------------------------------------------
用不同缓冲区长度进行读操作时,系统CPU时间最小值出现在BUFSIZE为4096处,继续增加对此时间几乎没有影响
>>------------------文件共享--------------------
每个打开文件(或设备)都有一个V节点(V-node)结构,V节点包含了文件类型和对文件进行操作的函数的各种指针,对大多数文件来说,它还包含该文件的i节
点(i-node索引节点)。i节点包含文件所有者,文件长度,文件所属设备,指向文件实际物理磁盘地址上的指针等
每一个进程都有自己的文件表项,其中也有他自己当前文件偏移量。
>>------------------原子操作--------------------
任何一个需要多个函数调用的操作都不可能是原子操作,因为在两个函数调用之间,内核有可能会挂起该进程。
>>----------sync、fsync、fdatasync--------------
int fsync(int filedes);
int fdatasunc(int filedes);
sync函数只是将所有修改过的块缓冲区排序写队列,然后返回,他并不等待实际写磁盘结束
fsync函数只对文件描述符filedes指定的单一文件起作用,并且等待写磁盘结束返回
>>----------fcntl函数--------------
fcntl函数可以改变已打开文件的性质
int fcntl(int diledes, int cmd, ...);
返回值:成功依赖于cmd,失败-1
在unix系统中,通常write函数只是将数据排入队列,而实际上写磁盘操作可能在以后的某个时间进行,数据库系统可能要用到O_SYNC,这样当它从write返回值就知道数据已经写到磁盘了
>>------------------------第3章 文件IO--------------------------------<<
open函数:
int open(const char *pathname, int oflag, ... )//返回值:成功返回文件描述符,出错-1
creat函数:
int creat(const char *pathname, mode_t mode); //返回值:成功只写打开的文件描述符,出错-1
close函数:
int close(int filedes); //返回值:成功0,失败-1
当一个进程终止时,内核自动关闭它所有打开的文件。
lseek函数:
off_t lseek(int filedes, off_t offset, int whence);//返回值:成功为新文件偏移量,出错-1
偏移量可能是负值,比较它的返回值时,不要测试是否小于0,要测试是否等于-1
read函数:
ssize_t read(int filedes, void *buf, size_t nbytes);//返回值:成功返回读到的字节数,已到文件尾返回0,出错返回-1
1.读普通文件时,在读到要求字节之前就读到文件尾,例如在到达文件尾前还有30个字节,而要求读100个字节,则read返回30,下次再调用read,它返回0
write函数:
ssize_t write(itn filedes, const void *buf, size_t nbytes);//返回值:成功返回已写字节数,出错-1
>>--------------------------------------------------IO的效率----------------------------------------------------------
用不同缓冲区长度进行读操作时,系统CPU时间最小值出现在BUFSIZE为4096处,继续增加对此时间几乎没有影响
>>------------------文件共享--------------------
每个打开文件(或设备)都有一个V节点(V-node)结构,V节点包含了文件类型和对文件进行操作的函数的各种指针,对大多数文件来说,它还包含该文件的i节
点(i-node索引节点)。i节点包含文件所有者,文件长度,文件所属设备,指向文件实际物理磁盘地址上的指针等
每一个进程都有自己的文件表项,其中也有他自己当前文件偏移量。
>>------------------原子操作--------------------
任何一个需要多个函数调用的操作都不可能是原子操作,因为在两个函数调用之间,内核有可能会挂起该进程。
>>----------sync、fsync、fdatasync--------------
int fsync(int filedes);
int fdatasunc(int filedes);
sync函数只是将所有修改过的块缓冲区排序写队列,然后返回,他并不等待实际写磁盘结束
fsync函数只对文件描述符filedes指定的单一文件起作用,并且等待写磁盘结束返回
>>----------fcntl函数--------------
fcntl函数可以改变已打开文件的性质
int fcntl(int diledes, int cmd, ...);
返回值:成功依赖于cmd,失败-1
在unix系统中,通常write函数只是将数据排入队列,而实际上写磁盘操作可能在以后的某个时间进行,数据库系统可能要用到O_SYNC,这样当它从write返回值就知道数据已经写到磁盘了
相关文章推荐
- UNIX环境高级编程-第3章 文件I/O
- UNIX环境高级编程 第3章 文件I/O
- UNIX环境高级编程-第3章- 文件I/O
- [UNIX环境高级编程]apue.h头文件的配置
- UNIX环境高级编程学习之第三章文件IO-文件读操作
- unix环境高级编程-3.10-文件共享
- UNIX环境高级编程学习之第六章系统数据文件和信息-GID To GroupName
- Unix环境高级编程——第四章 目录和文件
- Unix环境高级程序设计入门----文件系统的相关编程(上)
- unix环境高级编程-文件和目录-stat,fstate,lstat函数
- linux内核情景分析 UNIX环境高级编程 {进程 文件 内存}
- UNIX环境高级编程学习之第三章文件IO-文件写操作
- unix环境高级编程-4.14-文件系统
- Unix环境高级程序设计入门--文件系统的相关编程(上)
- UNIX环境高级编程第三章文件I/O 读后笔记
- unix环境高级编程-系统是如何设置文件权限的
- UNIX环境高级编程学习之第六章系统数据文件和信息-修改第四章实现的Shell的“ls -l”功能
- Unix环境高级程序设计入门----文件系统的相关编程(上)
- Unix环境高级编程第三章文件I/O摘记
- unix环境高级编程-文件长度与截断