自学内容网 自学内容网

Linux:文件IO介绍


每个操作系统中都有自己的系统函数,系统函数充当内核函数和用户之间的桥梁,因为系统函数的提供,使得用于可以间接地调用操作系统的内核函数。

1、文件打开与关闭

(1)文件打开open

打开磁盘文件,打开方式有:只读、只写、读写、追加、创建等)

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
// 打开一个已经存在的磁盘文件
int open(const char *pathname, int iOpenWay); 
// 打开磁盘文件, 如果文件不存在, 就会自动创建
int open(const char *pathname, int iOpenWay, mode_t mode);
  • pathname:磁盘文件的路径

  • iOpenWay:打开文件的方式,只读(O_RDONLY、O_WRONLY、O_RDWR、O_APPEND、O_CREATE、O_EXCL)

  • mode:指定新文件的权限,在创建新文件的时候才需要指定

  • return:正数表示返回的文件描述符,-1表示打开失败

(2)文件关闭close

关闭已经打开的磁盘文件

#include <unistd.h>
int close(int fd);
  • fd:文件描述符,一般是open返回的文件描述符
  • return:0表示文件关闭成功,-1表示关闭失败

2、文件数据读写

(1)文件读取read

从文件中读取数据

#include <unistd.h>
int read(int fd, void *buf, size_t bufSize);
  • fd:open函数返回的文件描述符
  • buf:将读取的数据保存到buf缓存中
  • bufSize:缓冲区的最大字节数
  • return:正数表示从文件中读取的字节数(读取成功);0表示文件读取完毕(读取成功);-1表示文件读取失败

(2)文件写入write

写入数据到磁盘文件中

#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t bufSize);
  • fd:open函数返回的文件描述符
  • buf:将buf中的数据写入到磁盘中
  • bufSize:写入的字节数,一般为缓冲区的大小
  • return:大于0表示写入的字节数量,-1表示写入失败

3、文件指针

文件指针是一个用于标识文件中特定位置的对象或变量

(1) lseek函数原型

#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
  • fd:open返回的文件描述符
  • offset:偏移量,需要和第三个参数配合使用
  • whence:指定函数偏移的起点;SEEK_SET表示从头开始偏移offset;SEEK_CUR表示从当前位置向后偏移offset;SEEK_END表示从尾部向后偏移offset
  • return:正数表示从头开始的总偏移量;-1表示该函数调用失败

(2) lseek函数的应用

A.移动文件指针

lseek(fd,0,SEEK_SET); //移动文件指针到文件开头
lseek(fd,0,SEEK_CUR); //得到当前文件指针的位置
lseek(fd,0,SEEK_END); //得到文件总大小

B.文件拓展

提前申请并占用一块磁盘空间;在下载文件的时候,为了防止在下载过程中磁盘空间不足,一般会提前占用需要大小的磁盘空间

lseek(fd, 1000, SEEK_END);
write(fd, " ", 1);//即可提前额外开辟1001个字节

(3)文件的拓展和截断

// 拓展文件或截断文件
#include <unistd.h>
#include <sys/types.h>
int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length);
  • path:要拓展或截断的文件名 fd:文件描述符
  • length:文件的最终大小,当文件大小size>length时候,文件将被截断;当文件大小size<length的时候,文件将被拓展
  • return:0表示成功,-1表示失败

truncate() 和 ftruncate() 两个函数的区别在于一个使用文件名一个使用文件描述符操作文件, 功能相同。


原文地址:https://blog.csdn.net/qq_42279379/article/details/142764037

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!