1.什么是文件
对于文件来说,文件=文件内容+文件属性;对于文件来说,只有两种操作,对内容的修改和对文件属性的修改,这就是文件的范畴。
对于存放在磁盘上的文件,我们需要通过进程来进行访问,访问文件:需要先写代码,然后编译,形成可执行文件,然后运行,最后访问文件。
所以,想要文件修改文件的内容,只能是操作系统才可以实现,如果是用户想要实现,就必须使用,操作系统提供的接口函数才能实现。
2.文件操作
对于操作系统提供的文件接口函数来说,它太过于复杂,我们先来了解语言层级的文件接口,语言级的文件操作处于就是对于将系统级文件接口进行封装,然后展现给用户的,所以语言级的文件操作函数就是一层外壳,其核心本质还是操作系统的文件操作。
为什么要实现语言级的函数呢?
为了实现语言的跨平台性,对于不同的操作系统来说,都有一套对应的文件操作函数,为了在各个平台上都可以打开同一份文件,所以语言对其进行了封装,使其可以在不同的平台上运行。
我们以C语言的文件操作函数为例:
文件操作函数基本用法:
结果:
对于fprintf(),fwrite(),fputs()三个函数来说,都是向文件中写入内容的,只是具体的操作不同而已。我们拿fputs()为例研究。
对于fputs()来说:
结果:
说明我们可以使用文件操作函数直接向显示器打印内容,说明显示器也可以是一个文件,所以,向磁盘中输入和向显示器中打印本质是一样的,所以,它俩本质是没有区别的,向显示器打印也是一种写入。
所以,在Linux下,一切皆是文件!!!
3.系统文件操作
有时候我们可以不用语言级接口调用,而直接使用系统提供的函数进行文件操作,这样的程序不具有跨平台性,但却依然存在。所以我们依然需要知道系统文件操作函数。
Linux认为,一切皆文件。
什么叫做文件呢?
对于操作系统来讲:只要可以input读取,或者可以output写出的设备就叫文件,狭义的文件:普通的文件,广义的文件:显示器,键盘,网卡,显卡,磁盘等几乎所有的外设,都可以称之为文件。
系统文件操作函数
这里只介绍常见的函数:open、read、wirte和close
open()使用方法:
//头文件
#include <sys/types.h>
#include <sys/stat.h>#include <fcntl.h>
int open(const char *pathname, int flags);//打开已经存在的文件
int open(const char *pathname, int flags, mode_t mode);//打开没有存在的文件,需要设置权限,具体查看man手册。第一个参数为文件名,第二个为标志位,第三个为文件权限,标志位可以有个,中间用 或操作符连接 比如: O_RDONLY|O_WRONLY|O_RDWR
第二个参数:O_RDONLY: 只读打开
O_WRONLY: 只写打开
O_RDWR : 读,写打开
这三个常量,必须指定一个且只能指定一个
O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件 的访问权限
O_APPEND: 追加写使用:
打开成功,返回文件描述符,失败返回-1。
文件描述符:就是一个小整数,最小0开始,0,1,2默认为 stdin,stdout,stderr,如果这三个文件没有被关闭,则创建的文件的文件描述符从3开始,如果被关闭,则从最小的被关闭的文件描述符开始;比如:
结果:
read() 函数使用
ssize_t read(int fd, void *buf, size_t count);
将文件找那个的内容读出来,
fd: 在文件描述符为fd的文件中开始读
buf: 把读得内容从buf的位置开始存放
count: 从buf位置开始存放count个字节
成功:返回实际读取数据的字节数
失败:返回-1
write()函数使用
ssize_t write(int fildes, const void *buf, size_t nbyte);
fd: 在文件描述符为fd的文件中进行写入
buf: 从buf位置开始读取数据
nbyte: 从buf位置开始读取nbyte个字节到文件中
成功:返回实际写入数据的字节数
失败:返回-1
close()函数
int close(int fd);
关闭文件