UNIX/Linux学习笔记(6)文件的管理
在之前小编学习了一点系统调用和一切设备皆文件的知识,这次小编想继续讲讲有关文件管理的内容
文件同步
1)缓冲区:
硬盘上一般都设有缓冲区,以此来提高数据写入的效率,当操作系统进行写入数据操作时其实先是把数据写入到缓冲区中,直到缓冲区满才排队写入到硬盘中。之所以提高了效率,是因为在缓冲区的帮助下减少了写入的次数,同时也减少了翻页的时间浪费,但是与此同时也提高了数据写入的延时,导致了缓冲区中的内容与磁盘中的内容不一致
2)文件同步函数:
①void sync(void)
功能:把所有缓冲区中的全部数据同步到磁盘
注意:此函数发布同步命令后立即返回,并非等到同步完成才返回
②int fsync(int fd)
功能:指定文件描述符为fd的文件的缓冲区数据同步到磁盘中
返回值:成功返回0,失败返回-1
注意:此函数只针对一个文件,且在数据同步到磁盘后才返回
③int fdatasync(int fd)
功能:指定文件描述符为fd的文件的缓冲区数据同步到磁盘中,但并不同步文件的属性
返回值:成功返回0,失败返回-1
文件控制fcntl
int fcntl(int fd, int cmd, …/* arg */)
这是一个变长参数的函数,随着操作指令cmd的不同,后续参数的个数和类型也不同,小编在此先不写有关锁的cmd参数
1)cmd = F_DUPFD
int fcntl(int fd, int cmd, long newfd)
功能:复制文件描述符
返回值:返回不小于newfd的文件描述符,若newfd已被使用并不会将其关闭,而是选择一个不比newfd小的且未使用的文件描述符
其实这个函数的功能与
dup2
很像,可以看下小编的笔记(5)
2)cmd = F_GETFD(void)
int fcntl(int fd, int cmd, void)
功能:取得close-on-exec标志
返回值:FD_CLOEXEC位为0,表示在另一个进程打开该文件,FD_CLOEXEC位为1则反之
3)cmd = F_SETFD(long)
int fcntl(int fd, int cmd, long)
功能:设置close-on-exec标志
返回值:成功返回0,失败返回-1
4)cmd = F_GETFL(void)
int fcntl(int fd, int cmd, void)
功能:获取文件的状态标志(open
函数的flags标志)
注意:无法获取O_CREAT、O_EXCL、O_NOCTTY、O_TRUNC
返回值:表示文件状态标志的类整型,与各标志相与可得其文件状态
5)cmd = F_SETFL(long)
int fcntl(int fd, int cmd, long)
功能:设置文件的状态标志
注意:只能设置O_APPED、O_ASYNC、O_DIRET、O_NOATIME、O_NONBLOCK
返回值:成功返回0,失败返回-1
文件属性
struct stat
struct stat {