Linux学习记录——IO

文件IO-(linux系统提供)

系统调用:当我们的应用程序要使用一些底层的功能的时候,不应该自行访问底层,而应该向操作系统发出请求。
特点:

  1. 不带缓冲区
  2. 操作系统直接提供的函数接口
  3. 调用系统调用是很耗费资源的

文件描述符:

  1. Linux系统为程序中每个打开的文件都分配一个文件描述符,文件IO操作通过文件描述符来完成。
  2. 文件描述符在形式上是一个顺序分配的非负整数。从0开始分配,依次递增。比如 0,1,2表示 stdin stdout stderr,一般最大打开的文件描述符数量为1024(0~1023)

文件IO函数

fdopen

FILE *fdopen(int fd, const char *mode);

  1. 功能:文件IO转换成标准IO
  2. 参数;
    fd: 文件描述符
    mode: 打开方式
  3. 返回指:
    成功:流指针
    失败:NULL

open

int open(const char *pathname, int flags, mode_t mode);

  1. 功能:打开文件
  2. 参数:
    pathname: 文件的路径名
    flags: 打开方式
    O_RDONLY:只读
    O_WRONLY:可写
    O_RDWR:读写
    O_APPEND:追加
    O_TRUNC:清零
    O_CREAT:创建
    mode: 文件的权限 0666
  3. 返回指:
    成功:文件描述符fd
    失败:-1

close

int close(int fd) -关闭文件

read

ssize_t read(int fd, void *buf, size_t count);

  1. 功能:从文件中读取count字节的数据到内存
  2. 参数:
    fd: 文件描述符
    buf: 内存地址
    count: 读取的字节数 100个字节
  3. 返回值:
    成功:
    0 返回实际读取到的字节数
    == 0 读到文件的末尾
    失败:
    <0 读取失败

write

ssize_t write(int fd, const void *buf, size_t count);

  1. 功能:把内存中的数据写入到文件中
  2. 参数:
    fd: 文件描述符
    buf: 内存地址
    count: 写入的字节数 100个字节
  3. 返回值:
    成功:返回实际写入的字节数
    失败:-1

lseek

off_t lseek(int fd, off_t offset, int whence);

  1. 功能:定位文件指针
  2. 参数:
    fd: 文件描述符
    offset: 偏移量
    100:向后偏移100个字节
    -100:向前偏移100个字节
    whence: 基点
    SEEK_SET:文件开头
    SEEK_END:文件末尾
    SEEK_CUR:文件当前位置
  3. 返回值:
    成功:0
    失败:-1

标准IO-(C库提供)

C库函数:在系统调用接口之上封装的接口,一个C库函数可以封装多个系统调用函数。
作用:

  1. 增强了代码的可移植性,复用性
  2. 提高了效率。
    标准IO增加了一个【缓冲机制】

FILE:系统会自动为使用的文件在内存中开辟一片空间,来存储该文件的详细信息,这个空间类型为 FILE 结构体类型,该结构体由系统设计。
FILE *:流指针,在标准IO中,每次成功打开一个文件,都会返回一个流指针,这个流指针就描述了一个文件,所有的标准IO都围绕流指针来进行。

标准IO函数

fopen

FILE *fopen(const char *path, const char *mode);

  1. 功能:打开文件
  2. 参数:
    path: 文件的路径 “./1.txt”
    mode: 打开方式
    r : 以只读的方式打开文件,文件必须存在
    r+ : 以读写的方式打开文件,文件必须存在
    w : 以写的方式打开文件, 文件不存在,则创建
    文件存在,则清空
    w+ : 以读写的方式打开文件, 文件不存在,则创建
    文件存在,则清空
    a : 以追加的方式打开文件(写), 文件不存在,则创建
    文件存在,则再文件的末尾追加
    a+ : 以追加的方式打开文件(读写), 文件不存在,则创建
    文件存在,则再文件的末尾追加
  3. 返回值:
    成功: FILE * (流指针 === 结构体指针)
    失败: NULL

fclose

int fclose(FILE *fp);

  1. 功能:关闭文件
  2. 参数:
    fp:流指针

freopen

FILE *freopen(const char *path, const char *mode, FILE *stream);

  1. 功能:改变流指针的指向
  2. 参数:
    path: 文件的路径名
    mode: 打开方式
    stream:流指针

fgetc

int fgetc(FILE *stream);

  1. 功能:读取一个字节的数据
  2. 参数:
    stream: 流指针
  3. 返回值:
    成功:返回这个字节
    失败:-1

fputc

int fputc(int c, FILE *stream);

  1. 功能:写入一个字节的数据
  2. 参数:
    c: 字节
    stream: 流指针

fgets

char *fgets(char *s, int size, FILE *stream);

  1. 功能:读取一行的数据
  2. 参数:
    s: 内存地址 char s[N];
    size: 内存空间的大小 N
    stream: 流指针
  3. 返回值:
    成功:返回读取字符串的首地址
    失败:NULL

fputs

int fputs(const char *s, FILE *stream);

  1. 功能:写入一行的数据
  2. 参数:
    s: 内存地址 char s[N];
    stream: 流指针
  3. 返回值:
    成功:1
    失败:-1

fseek

int fseek(FILE *stream, long offset, int whence);

  1. 功能:定位文件指针
  2. 参数:
    stream: 流指针
    offset: 偏移量
    100:向后偏移100个字节
    -100:向前偏移100个字节
    whence: 基点
    SEEK_SET: 文件开头
    SEEK_END: 文件末尾
    SEEK_CUR: 文件当前位置
  3. 返回值:
    成功:0
    失败:-1

ftell

long ftell(FILE *stream);
返回值:当前文件指针的位置

rewind

void rewind(FILE *stream);
功能:文件指针返回到文件开头

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值