C语言项目(二)——基于Linux系统下的带有GUI界面的即时通信软件

  • Post author:
  • Post category:linux


一.项目设计知识点——接上一篇

5.为什么选择库函数?什么时候用库函数操作文件?

通过库函数我们可以更好地使用其功能,节省了我们自己写函数的过程,并且对于已经运用成熟的库函数,我们很难写出更加高效的新算法。

库函数对文件的操作

1.文件分类:

通过流进行输入输出:文本文件(存放ASCII码)   和    二进制文件(二进制编码方式)

从用户角度: 普通文件  和   设备文件

文件内容: 源文件,目标文件,可执行文件,头文件,数据文件等

基本操作

文件指针:一个指向文件有关信息的指针,这些信息包括文件名,状态和当前位置,他们保存在一个结构体变量中。该类型为FILE 型。编写程序时可直接使用。

如: FILE *fp;          即fp是指向FILE类型的指针变量。

2.各种函数的使用

打开文件: fopen

函数原型    FILE * fopen(const char *path,cost char *mode)

作用:打开一个文件,返回指向该文件的指针

参数说明:第一个参数为欲打开文件的文件路径及文件名,第二个参数表示对文件的打开方式

注:mode有以下值:

r: 只读 ,文件必须存在

r+: 可读写,必须存在

rb+: 打开二进制文件,可以读写

rt+: 打开文本文件,可读写

w: 只写,文件存在则文件长度清0,文件不存在则建立该文件

w+: 可读写,文件存在则文件长度清0,文件不存在则建立该文件

a: (追加)附加方式打开只写,不存在建立该文件,存在写入的数据加到文件尾, EOF符保留

a+: 附加方式打开可读写,不存在建立该文件,存在写入的数据加到文件尾,EOF符不 保留

wb: 打开二进制文件,只写

wb+: 打开或建立二进制文件,可读写

wt+: 打开或建立文本文件,可读写

at+: 打开文本文件,可读写,写的数据加在文本末尾

ab+: 打开二进制文件,可读写,写的数据加在文件末尾

由mode字符可知,上述如r、w、a在其后都可以加一个b,表示以二进制形式打开文件

返回值:文件打开了,返回一个指向该打开文件的指针(FILE结构);文件打开失败,错误上存error code(错误代码)

注意:在fopen操作后要进行判断,是否文件打开,文件真正打开了才能进行后面的读或写操作,如有错误要进行错误处理

例:FILE *pfile=fopen(const char *filename,”rb”);

文件的关闭:

fclose(文件指针)

功能:关闭一个文件流,使用fclose就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区

成功返回值为0;否则返回EOF

程序结束之前应关闭所有文件,防止因为没有关闭文件儿造成数据流失。

文件读写:

fputc           ch=fputc(ch, fp);

作用:把一个字符写到磁盘文件(fp所指向的文件)中去,ch是要输出的字符,他可以是一个字符常量,也可以是一个字符变量。Fp是文件指针变量。

成功返回的就是输出的字符;失败返回EOF。

Fgetc 函数   ch=fgetc(fp);

作用:从指定的文件(fp所指向的文件)读入一个字符赋给ch,《注意文件必须读或读写的方式打开,当遇到文件结束符返回一个文件结束标志EOF》

fputS函数: fputs(字符串,文件指针); fputs(str , fp);

功能: 指定的文件写入字符串,其中字符串可以是字符串常量,也可以是字符数组名,指 针或变量。

fgets函数: fgets(字符数组名,n,文件指针); fegets(str,sizeof(str),文件指针);

功能: 从指定的文件中读出一个字符串到字符数组中。n表示所得到字符串中字符的个数(包含“\0”)。

fprintf 函数: ch=fprintf(文件类型指针,格式字符串,输出列表);

如:fprintf(fp,“%s”,i);

功能: 将整型变量i的值以“%s”(字符)的格式输出到fp指向的文件中。

fscanf 函数:fscanf(文件类型指针,格式字符串,输入列表);

如:fscanf(fp,“%d”,&i);

功能: 读入fp指向的文件中的i的值。

fread 函数: fread(buffer,size,count,fp);

fread(a,2,3,fp); 从fp指向的文件中每次读两个字节送入实数组a中,连续读3次。

功能: 从fp所指向的文件中读入count次,每次读size字节,读入的信息存在buffer地址中。

fwrite 函数: fwrite(buffer,size,count,fp);

fwrite(a,2,3,fp);将a数组的信息每次读出两个字节到fp所指向的文件中,连续读3次。

文件的定位

Fseek 函数: fseek(文件类型指针,位移量,起始点);

如:Fseek(fp,-20L,1);从当前位置后退20个字节。

作用:重定位文件内部的指针

参数:第一个为文件指针,第二个是指针的偏移量(要求long类型数据,常量表示位移加后缀L),第三个是指针偏移起始位置(0,1,2)

返回值:重定位成功返回0,否则返回非零值

需要注意的是该函数不是重定位文件指针,而是重定位文件内部的指针,让指向文件内部数据的指针移到文件中我们感兴趣的数据上,重定位主要是这个目的。

rewind 函数: in



版权声明:本文为Zhanganliu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。