-->

系统IO

系统文件IO函数

  1. open()

函数的作用:用于打开文件(pathname),对文件各种操作。

//函数原型,两个原型
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);


//需要的头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
  • 函数参数
参数 描述
pathname 文件的路径和文件的名字
flags 文件的权限
mode 文件的属性(第二个函数)仅当flags选择创建时有效

flags的选项太多,下面列出选项的作用

选项 描述
O_RDONLY 只读的方式打开文件,光标在头部
O_WRONLY 只写的方式打开文件,光标在头部。如果文件内有其他的数据,会清除,重新在头部输出。
O_RDWR 可读可写的方式打开文件,如果有数据,光标会在后面追加,如没有这个文件会创建
下面的宏可以与上面的按位或
O_APPEND 在文件尾部追加追加,光标会在文件的末尾
O_CREAT 在文件不存在的情况下会创建文件(一般用于三个参数的open)
  • 储着被打开文件的数据。接收这个返回值可以对知道这个文件的信息。

  • 返回值

int

这个顺序表,每一个返回值都对应着一个下标,都存储着被打开文件的数据。接收这个返回值可以对知道这个文件的信息。

每当文件运行时,系统会首先打开stdio stdout stderr这三个文件。

  1. read()

函数的作用:读取文件的信息,光标会跟随移动。

//函数原型,两个原型
ssize_t read(int fd, void *buf, size_t count);

//需要的头文件
#include <unistd.h>
  • 函数参数
参数 描述
fd 被打开文件的描述符
buf 读取的数据存放的位置
count 读取数据的字节大小
  • 返回值
ssize_t

返回实际读取数据的字节大小,出错返回-1

  1. write()

函数的作用:写入信息到文件,光标会跟随移动。

//函数原型,两个原型
ssize_t write(int fd, const void *buf, size_t count);

//需要的头文件
#include <unistd.h>
  • 函数参数
参数 描述
fd 被打开文件的描述符
buf 把这个缓冲区的数据写入进文件中
count 写入数据的字节大小
  • 返回值
ssize_t

返回实际写入数据的字节大小,出错返回-1

  1. write()

函数的作用:关闭文件

//函数原型,两个原型
int close(int fd);

//需要的头文件
#include <unistd.h>
  • 函数参数
参数 描述
fd 被打开文件的描述符
  • 返回值
int

关闭成功返回0,关闭失败返回-1

  1. lseek()

函数的作用:关闭文件

//函数原型,两个原型
off_t lseek(int fd, off_t offset, int whence);

//需要的头文件
#include <sys/types.h>
#include <unistd.h>
  • 函数参数
参数 描述
fd 被打开文件的描述符
offset 偏移量,可正(向右偏移)、可负(向左偏移)
whence 将光标偏移到那个位置,再加上偏移量

whence的参数

选项 描述
SEEK_SET 将光标设置在文件开头
SEEK_CUR 将光标设置在文件当前
SEEK_END 将光标设置在文件结尾
  • 返回值
off_t

返回文件开头到光标内的字节大小

  • 注意标准IO的函数和系统IO是有区别的

  • 标准IO函数有两个缓冲区(标准IO缓冲区和内核缓冲区)的系统IO只会有一个缓冲区(内核缓冲区)。

  • open函数的区别在标准IO中使用的是fopen返回的是结构体,并且文件信息是通过链表存储的(文件信息是堆内存),关闭文件只能关闭一次

    系统IO使用的是open返回的是整形,并且存储是使用顺序表,返回的是顺序表的下标,可以多次关闭,只有第一次关闭有效

posted @ 2024-06-01 13:54  wuju  阅读(27)  评论(0)    收藏  举报