Linux_基础IO

对于I/O,大家应该都不陌生,接触过计算机的同学应当都知道或了解I/O是什么。I/O英文为Input/Output,即输入输出的意思,在计算机上,我们的一台电脑可不是仅仅只有一个显示器,一个主机。还有着键盘啦,鼠标啦,打印机等等,其实这些设备都属于I/O设备,用来和计算机交互信息的,可以把我们想要的数据通过键盘输入进去,也可以通过打印机把我们想要的数据打印出来,这就是I/O。

大家在学习C语言的时候,有了解过文件相关的操作,先回顾一下C语言文件操作的几个函数:

1.perror:错误报告函数   

    之前有一个函数是strerror,他和perror虽然都是打印错误信息的,但是却是不一样的,具体表现在

     perror:将错误信息出处到终端。 

     strerror:将错误信息输出到指定的缓冲区

     strerror就不介绍了,这里介绍一下perror,perror以一种简单、统一的方式报告错误,在C函数库里,很多函数调用了系统接口来完成一些任务,I/O函数更是频繁的和系统调用打交道,然而并不是所有的调用都一定会成功,比如说当系统尝试打开一个更本就不存在的文件,读取内容的时候,操作系统就会发生错误,,这个时候,在有可能发生错误的地方加上perror,就可以提示出错误信息,让我们了解问题出在哪里。

#include <stdio.h>

int main(){
    FILE* fp = fopen("unexit","rb");//这里尝试打开一个根本不存在的文件
    if(fp == NULL){
        perror("The following error ocurred");
    }else
        fclose(fp);
    return 0;
}

2.exit:终止执行

exit,用于种植一个程序的执行

void exit(int status):参数status返回给操作系统,提示程序是否正常完成,C语言的预定义符号:EXIT_SUCCESS和EXIT_FAILURE来表示成功或者失败返回。

#include <stdio.h>
#include <stdlib.h>//exit定义在stdlib头文件中

int main(){
    FILE* fp = fopen("myfile.txt","r");
    if(fp == NULL){
        exit(EXIT_FAILURE);//程序退出,退出状态为EXIT_FAILURE
    }
    else
        fclose(fp);
    return 0;
}

3.流

上面提到了一些基本的I/O概念,对于C语言来说,所有的I/O操作就是简单的从程序读取放入字节的事情,因此这些字节被称为流,这样做的好处是程序员只需要关心有没有正确的放入或者拿出数据,不需要具体考虑怎么实现。

绝大多数的流都是完全缓冲的,这意味着“读取”和“写入”都在一块被称之为缓冲区的内存区来回的复制数据,从内存中来恢复至数据是特别快的,用于输出流的缓冲区只有被写满的时候才会被刷新(fflush)到设备或者文件,不过相比较而言一次把写满的缓冲区数据写入和逐片的写入每个程序产生的数据效率更高。

流也分为两种:文本流和二进制流

4.文件

头文件stdio.h中定义了FILE结构,FILE是一个数据结构,用于访问一个流。每激活一个流,都会对应的产生一个FILE结构。

对于ANSI C,每一个程序至少打开标准输入(stdin),标准输出(stdout),标准错误(stderr),都是指向FILE的指针。

5.打开流

FILE* fopen (const char* filename,const char* modle)

6.关闭流

int fclose(FILE* stream)

猜你喜欢

转载自blog.csdn.net/qq_40425540/article/details/80026514