IO的简单基础

一、C中文件接口。
  • c中文件接口又称标准IO接口。
  1. fopen():
  •   FILE * fopen ( const char * filename, const char * mode );
    

    参数
    ①filename: 是一个字符串,它包含文件名。
    ②mode: 也是字符串,表示的是访问模式。
    访问模式:

    • “r” 以只读方式打开文件,该文件必须存在。
    • “w” 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
    • “w+” 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
    • “a” 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
    • “a+” 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。(原来的EOF符不保留)
    • “wb” 只写打开或新建一个二进制文件,只允许写数据。
    • “wb+” 读写打开或建立一个二进制文件,允许读和写。
    • “ab” 追加打开一个二进制文件,并在文件末尾写数据。
    • "ab+"读写打开一个二进制文件,允许读,或在文件末追加数据。

    ③返回值:
    文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。

  1. fwrite():
  •   size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
        -- buffer:指向数据块的指针
       -- size:每个数据的大小,单位为Byte(例如:sizeof(int)就是4)
       -- count:数据个数
       -- stream:文件指针
    
    返回值:
  1. fread():
  •   size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
       -- buffer:指向数据块的指针
       -- size:每个数据的大小,单位为Byte(例如:sizeof(int)就是4)
       -- count:数据个数
       -- stream:文件指针
    
    返回值:
  1. fseek():
  •   int fseek ( FILE * stream, long int offset, int origin );
    
    重定位流(数据流/文件)上的文件内部位置指针,把文件指针指向文件的开头。
    stream:文件指针;
    offset : 偏移量,有正负偏移量之分。
    origin:文件从哪里开始偏移,
    可能取值为:SEEK_CUR、SEEK_END 或 SEEK_SET
    0 / SEEK_SET:文件开头
    1 / SEEK_CUR:当前位置
    2 / SEEK_END:文件结尾
  1. fclose():
  •   int fclose ( FILE * stream );
    
    stream:文件指针。
二、系统文件接口IO。
  1.  int open(char* filename,int flog,int mode)
        --filename:文件名称;
        --flog:可选参数;
        --mode :权限;
    

    可选参数:
    O_CRECT:文件存在打开,不存在创建;
    O_EXCL:通常与O_CREAT同时使用,文件不存在创建,已存在报错返回。
    O_TRUNC:打开文件的同时,清空文件原内容。
    O_APPEND:写入数据时,写在文件末尾。
    返回值:正整数,也就是文件描述符,文件的操作句柄。(失败返回-1)

  2.  ssize_t : 有符号整型;
     size_t :无符号整型;
     ssize_t write(int fd,char* data,size_t count)
     	--fd:文件描述符;
     	--data:写入的首地址;
     	--count:写入的长度;
    

    返回值:
    错误反回-1;
    >0:则是写入的长度(可能不等于实际)。

  3.  off_t lseek(int fd,off_t offset,off_t  whence)
     		--fd:文件描述符;
     		--offset:偏移量大小;
     		--wnence:偏移起始位置。
    

    返回值:-1:表示出错;>0:偏移长度。

  4.  ssize_t read(int fd,char* buf,size_t count)
     		--fd:文件描述符;
     		--buf:缓冲区首地址;
     		--count:读取文件的大小
    

    返回值:读取的文件长度;错误返回-1;==0:读到文件末尾。

  5.  头文件:#incude<unistd.h>
     close(fd);
    

    fd :文件操作符。

注意事项:
如果open使用可选参数O_CERAT,则需要加入权限参数。例如:(0777),前面的0不能丢了。

三、文件描述符和重定向
(一)、文件描述符:
  • 文件描述符实际上是内核中一个描述信息结构体的数组下标,通过PCB找到files_struct,再找到struct file* fd_carry[],从而找到文件。
  • 一个程序运行,默认打开了三个文件:标准输入I(0),标准输出O(1),标准错误(2)。
  • 库函数封装了系统调用接口。
  1. 文件流指针是一个结构体,并且这个结构体中封装了一个对象就是文件描述符。

  2. 我们通常所说的缓冲区,其实也是每一个file结构体中自带的缓冲区,用户态缓冲区。

    用户态:当前程序运行的是程序员自己写的代码,则程序运行于用户态。
    内核态:当前程序运行的程序为系统调用,即操作系统实现的功能,则程序运行于内核态。

(二)、重定向:
  1. 重定向符号:
    > :输出重定向到一个文件或设备 覆盖原来的文件
    >! :输出重定向到一个文件或设备 强制覆盖原来的文件
    >> : 输出重定向到一个文件或设备 追加原来的文件
    < : 输入重定向到一个程序

  2. 标准错误重定向符号:
    2> : 将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件 b-shell
    2>> : 将一个标准错误输出重定向到一个文件或设备 追加到原来的文件
    2>&1 : 将一个标准错误输出重定向到标准输出 注释:1 可能就是代表 标准输出
    >& : 将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件 c-shell
    |& : 将一个标准错误 管道 输送 到另一个命令作为输入

  3. 命令重导向:
    在 bash 命令执行的过程中,主要有三种输出入的状况,分别是:
    标准输入;代码为 0 ;或称为 stdin ;使用的方式为 <
    标准输出:代码为 1 ;或称为 stdout;使用的方式为 1>
    错误输出:代码为 2 ;或称为 stderr;使用的方式为 2>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值