各位看官们,大家好,上一回中咱们说的是基于文件描述符进行文件操作的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起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.
各位看官,关于文件操作:基于文件描述符的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/605538.html