栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

IO及其IO库函数(Linux)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

IO及其IO库函数(Linux)

目录

一、什么是IO

二、标准IO

1、标准IO

2、流

3、流的类型

4、缓冲区类型

三、标准IO相关库函数

1、打开文件 -- fopen

2、关闭文件 -- fclose

3、按字节读写 -- fgetc()/fputc()

4、按行读写 -- fgets()/fputs()

5、按对象读写

6、刷新流 -- fflush()

7、文件定位

8、判断错误流


一、什么是IO

比如你从磁盘中读取一个文件里面的内容,或创建一个文件写点内容保存到磁盘里

一句话,就是从一个设备中读read()数据到内存或者从内存写write()数据到这个设备。而这个设备就叫IO设备。

二、标准IO

文件类型:

普通文件-- '-';
目录文件-- 'd';
管道文件-- 'p';
链接文件-- 'l';
字符设备文件-- 'c';
块设备文件-- 'b';
套接字文件-- 's';
​
注意:不同的操作系统适用的文件类型不同
​
​

1、标准IO

标准IO遵循ANSI C标准,标准IO实际是调用标准c库中的函数

特点:

标准IO利用缓冲机制,减少系统调用的次数,从而提高程序运行效率

标准IO--高级IO4

文件IO--低级IO

标准IO是在文件IO的基础上做的一次再封装

标准IO一般用于操作普通文件

2、流

数据仅是简单的从文件进行流入、流出,我把这种现象称为流

流在文件中用FILE结构体描述

grep -r "_IO_FILE" /usr/include -- 查找FILE结构体

struct _IO_FILE
{
    char _IO_buf_base; /Start of reserve area. */
    char _IO_buf_end; /End of reserve area. */
    int _fileno;//文件描述符
}

在一个程序中,一个FILE结构体对应一份文件

三个特殊流:

标准输入流 "stdin" 键盘

标准输出流 "stdout" 终端

标准错误流 "stderr"

3、流的类型

流的类型有两种:文本流、二进制流

(1)文本流:

将数据转换为对应的ASCII码在进行存取

"1234"

49 50 51 52

(2)二进制流

将数据转换为二进制再进行存取

"1234"

1234 -->10011010010

文本流和二进制流处理换行符的方式

文本流:

将换行符转换'r'n'

二进制流:

换行符不做任何处理 -- 'n'

在Linux中,没有对文本流和二进制流做区分,换行符不做任何处理

4、缓冲区类型

(1)全缓冲:打开一个文件默认使用全缓冲,当缓冲区满或空时,才进行实际的IO操作

(2)行缓冲:当输入输出根终端相关时使用行缓冲,当缓冲区满或遇到换行符是才进行实际的IO操作

(3)无缓冲:跟错误输出相关时使用无缓冲

三、标准IO相关库函数
fopen()/fclose() --打开/关闭文件;
fgetc()/fputc() --按字节读写文件;
fgets()/fputs() --按行读写文件;
fread()/fwrite() --按对象读写文件;
ftell()/fseek()/rewind() --定位文件;
fflush() --刷新流;
feof() --判断错误流;

man手册:

1:shell指令和可执行程序

2:系统调用函数

3:标准库函数

1、打开文件 -- fopen
#include 
​
 FILE *fopen(const char *pathname, const char *mode);
​
参数:
    pathname:打开文件的文件名(包含路径)
    mode:打开文件的方式
        r;以只读的方式打开文件
        r+:以读写方式打开文件
        w:以只写方式打开文件,如果文件不存在,则会先创建再打开
        w+:以读写方式打开文件,如果文件不存在,则会先创建再打读
        a:以只写方式打开文件,如果文件不存在,则会先创建再打开  
        a+:以读写方式打开文件,如果文件不存在,则会先创建再打开
          
​
返回值:
    成功返回对应文件,失败返回NULL,并设置错误号(errno);
​
​
errno:当前系统中最后一个错误的编号
---------------------------------------------------
       #include 
​
       char *strerror(int errnum);
参数:
    errnum:错误号
返回值:
    成功返回错误原因
----------------------------------------------------
perror:
       #include 
​
       void perror(const char *s);
参数:
    s:提示信息
    
​
    

2、关闭文件 -- fclose
#include 
​
 int fclose(FILE *stream);
参数:
    stream:关闭文件对应的流指针
返回值:
     成功返回0,失败返回-1;

3、按字节读写 -- fgetc()/fputc()
#include 
​
 int fgetc(FILE *stream);
参数:
    stream:流指针
返回值:
    成功返回读取的字符,失败返回-1;
     读到文件末尾也会返回-1;
 #include 
​
 int fputc(int c, FILE *stream);
​
参数:
    c:输入的字符
    stream:流指针
返回值:
    成功返回写入的字符,失败返回-1;
    

4、按行读写 -- fgets()/fputs()
       #include 
​
       char *fgets(char *s, int size, FILE *stream);
参数:
    s:字符串首地址
    size:请求读取数据的最大长度
    stream:流指针
返回值:
    成功返回得到字符串的首地址,失败返回NULL;
注意:
    1、当读取内容遇到换行符,读取内容结束
    2、最大读取内容为size-1个
​
       #include 
​
       int fputs(const char *s, FILE *stream);
参数:
    s:写入字符串的首地址
    srteam:流指针
返回值:
    失败返回-1;
        
        
 练习:打开一个文件,统计该文件的行数

5、按对象读写
       #include 
​
       size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
     
​
参数:
    ptr;存放字符串的首地址
    size:对象大小
    nmemb:对象个数
    stream:流指针
返回值:
    成功返回读到个数,失败返回0;
​
       #include 
​
       size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
​
参数:
    ptr;存放字符串的首地址
    size:对象大小
    nmemb:对象个数
    stream:流指针
返回值:
    成功返回读到个数,失败返回0;

6、刷新流 -- fflush()
​
       #include 
​
       int fflush(FILE *stream);
​
参数:
    stream:流指针
返回值:
    返回0,失败返回-1;

7、文件定位
       #include 
​
       long ftell(FILE *stream);
功能:
    返回文件指针相对于文件开头的偏移量
参数:
    stream:流指针
返回值:
    成功返回文件指针相对于文件开头的偏移量,失败返回-1
    
文件指针最后定位位置 == offset + whence
​

       #include 
​
       int fseek(FILE *stream, long offset, int whence);
​
​
参数:
    stream:流指针
    offset:偏移量,可正可负
    whence:基准点
        SEEK_SET:将文件指针定位在文件开头
        SEEK_CUR:将文件指针定位在当前位置
        SEEK_END:将文件指针定位在文件末尾
返回值:
            成功返回0,失败返回-1;
            
文件指针最后定位位置 == offset + whence
       #include 
​
       void rewind(FILE *stream);
​
功能:
    将文件指针定位在文件开头

8、判断错误流
       #include 
​
       int feof(FILE *stream);
​
返回值:
    返回1表示流访问结束
    返回0表示错误返回

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1035041.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号