欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

一起talk C栗子吧(第一百三十九回:C语言实例--文件操作:基于文件描述符二)

程序员文章站 2022-12-05 10:06:49
各位看官们,大家好,上一回中咱们说的是基于文件描述符进行文件操作的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起talk c栗子吧! 看官们,我们在上一回中介绍...

各位看官们,大家好,上一回中咱们说的是基于文件描述符进行文件操作的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起talk c栗子吧!

看官们,我们在上一回中介绍了文件描述符,今天我们将和大家一起看看如何通过文件操作符来操作文件。

文件操作主要有以下三个 步骤:

1.打开文件 2.读/写文件 3.关闭文件

我称之为文件操作三步曲:打开,操作和关闭。在linux中,这三步曲是借助系统调用实现的。接下来我们介绍与文件操作相关的系统调用。

打开文件的系统调用

int open(const char *pathname, int flags); 
int open(const char *pathname, int flags, mode_t mode);(新版本的open)
该函数用来打开文件或者创建一个新文件; 该函数的第一个参数是文件名,该文件名表示要打开的文件或者创建的文件; 该函数的第二个参数是打开文件的方式,详见下面的说明; 该函数的第三个参数是创建新文件后,新文件拥有的权限; 该函数运行成功时返回一个文件描述符;运行失败时返回-1,并且设置设置全局变量error。

第二个参数的值可以是以下类型中的任意一个:

o_rdonly(只读的方式打开文件), o_wronly(只写的方式打开文件), o_rdwr(读和写的方式打开文件),

另外,该参数的值还可以是 o_append(在文件尾添加数据)和o_creat(创建新文件)。这两个值可以和上面三个值进行或操作,这样对文件进行操作时会包含两个值的意义。例如

open("test",o_wronly | o_creat,s_irwxu )

会创建一个叫test的文件,并且可以对该文件进行写操作。

这里有两个open函数,我们用哪个呢?看官莫急,通常使用第一个open函数来打开文件,如果创建文件时那么就需要使用第二个open函数。这时也会用到第三个参数,该参数的值可以是 s_irusr类型的值,而且这些数据可以进行或操作。比如

s_irwxu | s_irwxg | s_ixoth

操作文件的系统调用

ssize_t read(int fd, void *buf, size_t count);
该函数用来从文件中读取数据; 该函数的第一个参数是文件描述符,它会读取与该文件描述符相对应的文件中的数据; 该函数的第二个参数是缓冲区,它会把读取到的数据存放到该缓冲区中; 该函数的第三个参数是每次读取的字节数量; 该函数运行成功时返回读取到的字节数量,如果为0说明已经到了文件末尾。如果运行失败返回-1.并且设置全局变量error
ssize_t write(int fd, const void *buf, size_t count);
该函数用来向文件中写入数据; 该函数的第一个参数是文件描述符,它会向与该文件描述符相对应的文件中的写入数据; 该函数的第二个参数是缓冲区,它会把缓冲区中的数据写入到文件中; 该函数的第三个参数是每次写入的字节数量; 该函数运行成功时返回写入到文件中的字节数量,如果为0说明没有写入数据。如果运行失败返回-1.并且设置全局变量error。

关闭文件的系统调用

int close(int fd);
该函数用来关闭文件; 该函数的参数表示文件描述符,它会把与该文件描述符相关联的文件关闭掉,或者说释放该文件描述符。 该函数运行成功时返回0,运行失败时返回-1.

各位看官,关于文件操作:基于文件描述符的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。