C++学习日志day27-----UC-系统调用和库函数直接的关系,文件的杂项

系统调用和库函数之间的关系
我们以库函数的文件操作和系统调用操作文件为例,来讨论系统调用和库函数之间的关系。
库函数:fopen(3) fgetc(3) fputc(3) fseek(3) fclose(3)
system call:open(2) write(2) read(2) lseek(2) close(2)
system_call&lib
当调用库函数来操作文件的时候,会现在内存中申请一块内存用作于缓存。
库函数对文件操作的所有函数,共同维护一个结构体。
结构体中用指针分别指向这块缓存的读区域的起始地址,结束地址,和当前读取位置。写区域也是这样。
缓存申请结束后,fopen函数使用得到的参数(文件路径,和打开方式)调用open函数,拿到open返回的文件描述符,记录在结构体中,以提供给其他函数使用。
当用户调用fgetc函数时,先检查读缓存内是否有数据,如果有直接返回。如果没有则调用read函数从文件中读取到缓存,再从缓存返回。
当用户调用fputc函数时,先检查写缓存是否满,如果满了,先把缓存中的数据通过write函数写入到文件,并清空缓存,然后再将新的数据写入缓存。
正常情况下,只有写缓存满了,才会调用write向文件写入。但是,可以通过fflush函数,调用write将写缓存中的数据写入到文件。
通过库函数操作的文件,被称为缓存文件。
通过系统调用操作的文件,被称为非缓存文件。
系统调用是由操作系统提供的,不同的操作系统提供的系统调用接口可能不同,所以由系统调用编写的用户程序,是不具备跨平台的特性的。
库函数封装了操作系统提供的系统调用。在不同的操作系统上,虽然系统提供的接口可能不同,但是经过库函数的一次封装,向上层提供的库函数接口是一致的。用库函数编写的用户程序是具有跨平台特性的。

文件操作的杂项
对文件/文件夹的操作还有很多系统调用和库函数。不一一介绍,以下提供一些比较常用和重要的操作文件的函数。
mkdir(2)
rmdir(2)
chdir(2) cd
umask(2)
chmod(2)
unlink(2)
link(2)/unlink(2) hard link
symlink(2)
rename(2)
access(2)
getcwd(3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值