Linux--文件操作

1.什么是文件

        对于文件来说,文件=文件内容+文件属性;对于文件来说,只有两种操作,对内容的修改和对文件属性的修改,这就是文件的范畴。

对于存放在磁盘上的文件,我们需要通过进程来进行访问,访问文件:需要先写代码,然后编译,形成可执行文件,然后运行,最后访问文件。

所以,想要文件修改文件的内容,只能是操作系统才可以实现,如果是用户想要实现,就必须使用,操作系统提供的接口函数才能实现。

2.文件操作

        对于操作系统提供的文件接口函数来说,它太过于复杂,我们先来了解语言层级的文件接口,语言级的文件操作处于就是对于将系统级文件接口进行封装,然后展现给用户的,所以语言级的文件操作函数就是一层外壳,其核心本质还是操作系统的文件操作。

为什么要实现语言级的函数呢?

为了实现语言的跨平台性,对于不同的操作系统来说,都有一套对应的文件操作函数,为了在各个平台上都可以打开同一份文件,所以语言对其进行了封装,使其可以在不同的平台上运行。

我们以C语言的文件操作函数为例:

文件操作函数基本用法:

Linux--文件操作_第1张图片

结果:

Linux--文件操作_第2张图片

对于fprintf(),fwrite(),fputs()三个函数来说,都是向文件中写入内容的,只是具体的操作不同而已。我们拿fputs()为例研究。

对于fputs()来说:

Linux--文件操作_第3张图片

结果:

说明我们可以使用文件操作函数直接向显示器打印内容,说明显示器也可以是一个文件,所以,向磁盘中输入和向显示器中打印本质是一样的,所以,它俩本质是没有区别的,向显示器打印也是一种写入。

所以,在Linux下,一切皆是文件!!!

3.系统文件操作

        有时候我们可以不用语言级接口调用,而直接使用系统提供的函数进行文件操作,这样的程序不具有跨平台性,但却依然存在。所以我们依然需要知道系统文件操作函数。

Linux认为,一切皆文件。

什么叫做文件呢?

对于操作系统来讲:只要可以input读取,或者可以output写出的设备就叫文件,狭义的文件:普通的文件,广义的文件:显示器,键盘,网卡,显卡,磁盘等几乎所有的外设,都可以称之为文件。

系统文件操作函数

这里只介绍常见的函数:open、read、wirte和close

open()使用方法:

//头文件
#include
#include

#include

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);

关闭文件

你可能感兴趣的:(linux,运维,服务器)