1 . 文件管理
1.1 标C文件处理和UC文件处理函数的比較:
标C文件处理函数比UC的文件处理函数速度快。由于标C内部独立输入输出缓冲区,
会积累一定数量之后再写入文件,因此读写效率比較高
使用time命令能够获取进程的执行时间
time b.out
real 0m0.081s =>真实时间
user => 用户态时间
sys => 内核时间
1.2 文件描写叙述符:
进程 =》 文件描写叙述符表=》文件表=》V字节(包括I字节)
文件描写叙述符就是一个整数,能够代表打开的文件,可是文件的信息不是存在文件描写叙述符中,而是存在文件表等结果中
当打开一个文件时。系统会把文件的信息存入文件表等结构中,可是处于安全的考虑。文件表等结构并非直接操作。而
是给文件表相应一个编号,拿着编号进行操作。而编号就叫做文件描写叙述符
在进程的内部维护一张文件描写叙述符的总表。当使用open函数打开文件时,就会载入该文件的信息到内存中,然后去文件描写叙述符
总表查找一个最小的未被使用的描写叙述符建立和文件表相应的关系。而文件描写叙述符是非负整数
close函数不会改变文件描写叙述符的整数值,仅仅是会让描写叙述符无法代表一个文件
1.3 dup/dup2函数
#include <unistd.h>
int dup(int oldfd);
函数功能: 主要用于依据參数指定的描写叙述符进行复制,成功返回新的描写叙述符,失败返回-1
int dup2(int oldfd, int newfd);
函数功能:主要用于将oldfd參数指定的文件表地址复制到newfd中,假设newfd占用,则考虑强制关闭。
成功则返回文件描写叙述符,失败返回-1
1.4 fcntl函数
#include <unistd.h>
#include <fcntl.h>
int fcntl(int fd, int cmd, ..../*arg*/);
第一个參数:文件描写叙述符(对哪个文件操作)
第二个參数:命令/操作(运行什么样的操作)
F_DUPFD
F_GETFD/F_SETFD
F_SETFL/F_SETGL
F_SETLK/F_SETLKW/F_GETLK
第三个參数:可变长參数
函数功能:
(1)主要用于拷贝文件描写叙述符
(2)设置、获取文件描写叙述符的功能
(3)设置获取文件状态标志的功能
(4)主要勇于实现建议文件锁的功能
1.5 使用fcntl实现文件锁的功能
(1)文件锁的作用
当有多个进程同一时候对一个共享文件进行读写操作时,可能会造成数据混乱和不一致性。理论上应该要求多个进程对文件
操作进行串行而不是并行,假设两个进程都是读文件则同意同一时候进行,仅仅要有一个写操作。则另外一个进程应该等待,为
了实现该功能,须要借助文件锁来实现
(2)实现文件锁的功能,
fnctl函数的第三个參数值: 结构体指针
结构体: struct flock