上一篇博客我们解说了怎样使用Linux提供的文件操作函数,本文主要解说使用C语言提供的文件操作的库函数。

1.函数介绍

fopen(打开文件)

相关函数

open,fclose

表头文件

#include<stdio.h>

定义函数

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

函数说明

參数path字符串包括欲打开的文件路径及文件名称,參数mode字符串则代表着流形态。
mode有下列几种形态字符串:
r 打开仅仅读文件,该文件必须存在。
r+ 打开可读写的文件,该文件必须存在。
w 打开仅仅写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开仅仅写文件。若文件不存在,则会建立该文件,假设文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,假设文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
上述的形态字符串都能够再加一个b字符,如rb、w+b或ab+等组合,增加b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。只是在POSIX系统,包括Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会參考umask值。

返回值

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

附加说明

一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误推断及处理。

范例

#include<stdio.h>
main()
{
FILE * fp;
fp=fopen(“noexist”,”a+”);
if(fp= =NULL) return;
fclose(fp);
}

fgetc(由文件里读取一个字符)

相关函数

open,fread,fscanf,getc

表头文件

include<stdio.h>

定义函数

nt fgetc(FILE * stream);

函数说明

fgetc()从參数stream所指的文件里读取一个字符。若读到文件尾而无数据时便返回EOF。

返回值

getc()会返回读取到的字符,若返回EOF则表示到了文件尾。

范例

#include<stdio.h>
main()
{
FILE *fp;
int c;
fp=fopen(“exist”,”r”);
while((c=fgetc(fp))!=EOF)
printf(“%c”,c);
fclose(fp);
}

fputc(将一指定字符写入文件流中)

相关函数

fopen,fwrite,fscanf,putc

表头文件

#include<stdio.h>

定义函数

int fputc(int c,FILE * stream);

函数说明

fputc 会将參数c 转为unsigned char 后写入參数stream 指定的文件里。

返回值

fputc()会返回写入成功的字符,即參数c。若返回EOF则代表写入失败。

范例

#include<stdio.h>
main()
{
FILE * fp;
char a[26]=”abcdefghijklmnopqrstuvwxyz”;
int i;
fp= fopen(“noexist”,”w”);
for(i=0;i<26;i++)
fputc(a[i],fp);
fclose(fp);
}

fflush(更新缓冲区)

相关函数

write,fopen,fclose,setbuf

表头文件

#include<stdio.h>

定义函数

int fflush(FILE* stream);

函数说明

fflush()会强迫将缓冲区内的数据写回參数stream指定的文件里。假设參数stream为NULL,fflush()会将全部打开的文件数据更新。

返回值

成功返回0,失败返回EOF,错误代码存于errno中。

错误代码

EBADF 參数stream 指定的文件未被打开,或打开状态为仅仅读。其他错误代码參考write()。

feof(检查文件流是否读到了文件尾)

相关函数

fopen,fgetc,fgets,fread

表头文件

#include<stdio.h>

定义函数

int feof(FILE * stream);

函数说明

feof()用来侦測是否读取到了文件尾,尾数stream为fopen()所返回之文件指针。假设已到文件尾则返回非零值,其他情况返回0。

返回值

返回非零值代表已到达文件尾。

fclose(关闭文件)

相关函数

close,fflush,fopen,setbuf

表头文件

#include<stdio.h>

定义函数

int fclose(FILE * stream);

函数说明

fclose()用来关闭先前fopen()打开的文件。此动作会让缓冲区内的数据写入文件里,并释放系统所提供的文件资源。

返回值

若关文件动作成功则返回0,有发生错误时则返回EOF并把错误代码存到errno。

错误代码

EBADF表示參数stream非已打开的文件。

范例

请參考fopen()。

小试牛刀

我们先来看看我们上边讲了哪几个函数

fopen 打开文件函数

fgetc() fputc() 从文件读取或者往文件里写入一个字符

feof()  推断当前文件指针是否已经到文件末尾

fflush() 刷新文件缓冲区到文件里

fclose() 关闭文件(附带一个刷新文件缓冲区内容的操作)

流程设计:

首先输入一个数字代表创建的文件的行数n

然后输入文件的名字代表创建文件的名字name

然后我们打开文件 open()

输入n行的内容直到n行输入完成

将文件缓冲区刷新

关闭文件

再次打开文件

统计输入文本中有字符‘a’的个数并输出出来

关闭文件

Demo实现

#include <stdio.h>

int main(void)

{

    //首先输入一个数字代表创建的文件的行数n

    int n;

    char c;

    int iCount = 0;

    //然后输入文件的名字代表创建文件的名字name

    char filename[128];

    printf("请输入文件的行数:n\n");

   scanf("%d",&n);

    printf("请输入文件的名称:filename\n");

   scanf("%s",filename);

    getchar();

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

    //然后我们打开文件 open()

    FILE* file =fopen(filename,"wb+");

    printf("文件打开成功\n");

    //输入n行的内容直到n行输入完成

    while(n--)

    {       // int fputc(int c, FILE *stream);

           do

            {

                c = getchar();

            }

           while(fputc(c,file) !='\n');

    }

    //将文件缓冲区刷新

    fflush(file);

    //关闭文件

    fclose(file);

     printf("关闭文件\n");

    //再次打开文件

     file =fopen(filename,"rb");

    //统计输入文本中有字符‘a’的个数并输出出来

    while(!feof(file))

    {

        if(fgetc(file) == 'a')

            ++iCount;

    }

    fclose(file);

    printf("关闭文件\n");

    printf("共同拥有%d个a\n",iCount);

    return 0;

}

平台效果

在RHEL7上

在MAC上

在Solaris上

Unix/Linux环境C编程新手教程(41) C语言库函数的文件操作具体解释的更多相关文章

  1. Unix/Linux环境C编程入门教程(41) C语言库函数的文件操作详解

     上一篇博客我们讲解了如何使用Linux提供的文件操作函数,本文主要讲解使用C语言提供的文件操作的库函数. 1.函数介绍 fopen(打开文件) 相关函数 open,fclose 表头文件 #in ...

  2. Unix/Linux环境C编程新手教程(5) Red Hat Enterprise Linux(RHEL)环境搭建

    Unix/Linux版本号众多,我们推荐Unix/Linux刚開始学习的人选用几款典型的Unix/Linux操作系统进行学习. 通过./a.out ./Y.out运行出结果,证明C++程序编译成功.也 ...

  3. Unix/Linux环境C编程新手教程(22) C/C++怎样获取程序的执行时间

    1.问:知道程序执行时间我们能够做什么? 在<C++应用程序性能优化>一书中,假设大家读过相信大家一定对性能优化这一块很上心,文中总是对优化前后的时间对照很直观给我们一个感受. 那么我们怎 ...

  4. Unix/Linux环境C编程新手教程(21) 各个系统HelloWorld跑起来效果怎样?

    版权声明:本文为博主尹成联系QQ77025077,微信18510341407原创文章,欢迎转载侵权不究. https://blog.csdn.net/yincheng01/article/detail ...

  5. Unix/Linux环境C编程新手教程(12) openSUSECCPP以及Linux内核驱动开发环境搭建

    1. openSUSE是一款优秀的linux. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaXRjYXN0Y3Bw/font/5a6L5L2T/font ...

  6. Unix/Linux环境C编程新手教程(24) MySQL 5.7.4 for Red Hat Enterprise 7(RHEL7)的安装

    远观历史, MySQL的主要目的是为了可以在单处理器核心的商业服务器上执行.现在MySQL的一个变化用户可能不会注意到,那就是甲骨文已经開始又一次架构MySQL的代码,使它大量的模块化.如软件解析器, ...

  7. Unix/Linux环境C编程新手教程(30) 字符串操作那些事儿

    函数介绍 rindex(查找字符串中最后一个出现的指定字符) 相关函数 index,memchr,strchr,strrchr 表头文件 #include<string.h> 定义函数 c ...

  8. Unix/Linux环境C编程新手教程(40) 初识文件操作

     1.函数介绍 close(关闭文件) 相关函数 open,fcntl,shutdown.unlink,fclose 表头文件 #include<unistd.h> 定义函数 int ...

  9. Unix/Linux环境C编程新手教程(37) shell经常使用命令演练

     cat命令 cat命令能够用来查看文件内容. cat [參数] 文件名称. grep-指定文件里搜索指定字符内容. Linux的文件夹或文件. -path '字串' 查找路径名匹配所给字串的全部 ...

随机推荐

  1. x264 - open gop and closed gop

    GOP - Group of picture(影像集团),它指的是两个I帧之间的距离. Reference(基准期).  它指的是两个P帧之间的距离. 简而言之, 跨参考gop的,变open gop: ...

  2. SDUT 2498-AOE网上的关键路径(spfa+字典序路径)

    AOE网上的关键路径 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 一个无环的有向图称为无环图(Directed Acycl ...

  3. Delete和Truncate的区别

    原文:Delete和Truncate的区别 一般对于没有用的数据,都会经行删除,而删除通常使用的是DELETE和TRUNCATE命令.对于有条件地删除,基本上就会使用DELETE,当然还是没有绝对,用 ...

  4. Sql中联合查询中的”子查询返回的值不止一个“的问题

    在子查询中,如果想实现如下的功能: select lib,count(*),select sum(newsNo) from Table1 group by lib from Tabel1 T1,Tab ...

  5. MapXtreme DJ最短路径算法 全路径搜索算法

    包括最短路径,全路径搜索算法演示程序请在http://pan.baidu.com/s/1jG9gKMM#dir/path=%2F%E4%BA%A7%E5%93%81%2FDemos 找 ShortWa ...

  6. registerForRemoteNotificationTypes: is not supported in iOS 8.0 and

    注册模式: if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) { [[UIApplication sharedA ...

  7. VB.Net出口Excel原则

        在VB机房的版本中,我们已经暴露导出Excel特征,此功能已重新接触到不同的理解 一.原理 要实现导出Excel的功能,首先要引用命名空间,目的是能够使用该命名空间下的方法和类 Imports ...

  8. 章节2:SQL之多表连接

    原文:章节2:SQL之多表连接 Sql的多表连接关系有:内连接.外连接和交叉连接. 先建立两个用于演示的表: TB_Characters: Id Character 1 内向 2 外向 3 中性性格 ...

  9. 百度地图 Android SDK - 个性化地图

    什么是百度个性化地图Android SDK? 百度个性化地图Android SDK是一套基于Android 2.2及以上版本号设备的应用程序接口,您能够通过该套接口实现主要的地图功能,而且能够定制地图 ...

  10. android账号与同步之发起同步

    上一篇博文我介绍了账号与同步的同步实现过程,当中提供了一个工系统进程调用的服务,那么这个服务究竟是怎么被启动和使用的呢?这篇博文我就大体梳理一下启动过程. 事实上作为一个一般开发者,我们仅仅要知道要想 ...