Linux讲解 基础IO-C库接口

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Hanani_Jia/article/details/82149977

  我们在C语言的时候就接触了一些IO接口,用来向文件中写入或者在文件中读取一些数据,例如fopen打开一个文件fclose关闭一个文件,fread读取文件的内容,fwrite向文件中写入内容等等很多接口。

这里我们写一个在C语言下边经常使用的往文件中写内容的程序,这里的fopen函数后边的选择有很多种。

r是只读模式,我们可以尝试一下以只读模式打开我们的文件然后往文件里边写东西会有什么后果,会发现给我们报错。因为这是只读模式我们是不能写的。r+是以读写的方式打开我们的文件,但是这两个r都有一个要求就是我们要操作的文件必须是存在的,如果不存在的话会出现问题。

w是只写模式那就是只能写不能读取。w+是以读写方式打开我们的文件,如果要操作的文件是不存在的,那么我们会创建一个这个名字的文件,但是这两个也有一个共性就是这两个属性操作我们的文件的时候会把存在的文件长度截断为0也就是原本文件中的内容会消失。

a是我们的追加模式当我们以追加模式打开文件的时候(只是单纯的把上边的w改成a)这时候我们多次运行我们的程序,发现运行一次我们的文件就会多出来一行hello world并且在a模式下我们文件的EOF符会进行保留

a模式下的追加是在我们的文件末尾进行追加的并且我们的fseek函数是不会起到任何作用的。但是我们在a+模式下就可以使用我们fsee函数来移动我们的图标并且a+模式下我们原文件的EOF符不会被保留下来。。我们这时候在程序里边加入fseek函数来移动我们的光标这里需要注意的是我们在a+情况下打开的文件,我们只有在获取文件内容的时候才是会去移动我的光标,每次往文件写入内容的时候光标都会默认移动到我们的文章末尾。

这是我们要操作的要读取的文件

我们使用fread函数来读取我们文章中的数据,然后把数据存储到我们的buff函数中。

这是我们读取到的结果会发现前边少了几个字母,那就是我们光标移动的结果。

 这里说一下我们经常在文件里边看到的那种^@这些符号,其实这算是我们二进制的机器语言,转换成我们看懂的就变成了这样

fread也是我们C库函数中很重要的一个。它需要传入四个参数,就拿我们上边的语句来说,意思是从我们fp文件指针指向的文件中读取1024个元素每个元素的字节是1,然后存到buff中,并且我在程序中也做了实验我们的1024和1的位置,也就是size和nmemb的位置是可以相互交换的。

 fopen,fclose,fseek,fwrite,fread是我们C库提供给我们的十分常用的一些IO调用函数,假如我们现在需要向屏幕打印一句话我们应该怎么写程序,除了printf还有没有其他函数让我们调用。

大家可以看一下我们这个程序会输出什么

我们三个语句都在我们的屏幕输出了我们想要的话,printf自然不用多说,我们平时用的最多直接输出内容到我们的屏幕,sprintf函数是发送格式化输出到我们的str这里也就是buff字符串,本来这条消息是没有输出的,但是我们又用了printf函数把我们的buff字符串输出了所以屏幕同样也出现了内容,,fprintf的意思是将我们的字符串信息输出到我们的流当中,其实fp指针就算是一个我们的流,这里我们的流使我们的stdout也就是我们的标准输出,这里会感觉我们的fwrite和fprintf是一样的,这两个函数来说对于我们的计算机来说都是一样的,但是对于我们来说是有一些不同的1、fprintf(fp, "%d", buffer);是将格式化的数据写入文件fwrite(&buffer, sizeof(int), 1, fp)是以二进制位方式写入文件,所以经常会有我们的fwrite写入后的文件打开是乱码,fprint就没有问题,而且两种写入方式很有可能会出现文件大小不同的情况,大家可以去了解一下。

 之后我们再介绍一下我们C中的文件流指针,C会默认给我们打开三个流分别是stdint,stdout,stderr标准输入、标准输出、标准错误输出。刚刚我们演示了通过fprintf函数来向我们屏幕输出数据,实际上我们平时用的printf就是对fprintf函数的一个封装,之后我们会详细的介绍

 

猜你喜欢

转载自blog.csdn.net/Hanani_Jia/article/details/82149977
今日推荐