Summary Day32

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值