1、fseek
函数原型:int fseek( FILE *fp, long offset, int origin );
参数介绍:fp为文件指针;offset为偏移量,正值表示正向偏移,负值表示负向偏移;origin为所要偏移的基准位置(也即从哪里开始偏移),一般常用的有三种取值,分别为SEEK_SET(文件开头)、SEEK_CUR(当前位置)、SEEK_END(文件结尾),也可以用这些宏名对应的数值, 它们的值分别为0(开头),1(当前),2(结尾)。函数返回值为当前位置,否则返回-1。
函数功能:将fp所指向的文件位置指针移动到origin所指的位置,以此为基准,然后以偏移量offset移动到指定偏移的位置。
例子:fseek(fp,100L,0);//把文件从开头移动到100个字节的位置,其中0也可以用SEEK_SET来代替
fseek(fp,100L,1);//把文件从当前位置移动到100个字节的位置
fseek(fp,-100L,2);//把文件从文件末尾退回到100个字节处
2、ftell
函数原型:long ftell(FILE *fp)
函数功能:返回文件指针所指向的位置离文件开头偏移的字节数(也即从当前位置离文件开头的距离)
该函数可以与fseek结合来计算出文件的长度,先将文件移动到文件末尾fseek(fp,0,SEEK_SET);然后调用length=ftell(fp);也就得到了文件的长度。
3、GetTickCount
函数原型:DWORD GetTickCount(void)
该函数无需传递参数。
函数功能:该函数返回从操作系统启动到现在的毫秒数,所以如果在程序启动的时候,记下时间,当程序结束,再记下该时间,两次时间之差,就得到这个程序的运行时间。
由于返回值是DWORD类型,即double word,每个word是2个字节,DWORD就是4个字节,共32位,可以存储的最大数为2^32ms,约为49.71天,当超过这个时间,这个数字会归0。所以如果计数范围大约这个时间,要慎用。比如在编写服务器端程序,就要小心这种情况的发生。另外还要注意,这个函数并非实时发送,而是由系统没18ms发送一次,因此最小精度为18ms,如果计数间隔小于该值,不应该用该函数,而应改用StopWatch。
4、fopen
函数原型:FILE *fopen(char *filename,char *mode)
参数介绍:filename是一个字符串指针,在使用的时候,也可以直接用“文件的路径名加上文件名”(包括文件的后缀),并且注意在输入路径的时候用\\,而不是\,例如:E:\\Code\\Test\\input.txt。mode指打开的模式,有以下几种
r 以只读方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在。
有错则返回非0,正确返回0
函数功能:关闭fp所指的文件,将该指针与指针“脱钩”,并释放文件的缓存区。使用完一个文件后应该关闭它,防止在之后的程序因误用造成文件内容更改。
6、fread和fwrite
函数原型:int fread(char *pt,unsigned size,unsigned n,FILE *fp)
int fwrite(char *pt,unsigned size,unsigned n,FILE *fp)
参数说明:两者的形参都一样,pt是一个字符串指针,指向要读写数据的起始地址(常常是缓存区的地址),size表示要读写的字节数(几个字节一起读写),n表示要读写多少个size字节大小的数据项。对于fread,返回值是所读入的数据项个数,也即n的值,如果遇到文件结束或出错则返回0;对于fwrite,返回值是写入到文件中的数据项个数,即n的值,写入失败,也是返回0。
这里要注意,在读写之前要先调用fopen函数打开文件,并且规定是具有读权限还是写权限,如果前面只规定读,后面却用了写操作,写操作是不起作用的,返回值为0。即fopen函数不光是打开一个文件,还控制数据流的方向,影响后面fread和fwrite函数的实现。
例子:FILE *fp=NULL;
char a[]="hello&world"
fp=fopen("E:\\Code\\Test\\input.txt","a+");
fwrite(a,2,4,fp);
7、fscanf和fprintf
函数原型:int fscanf(FILE *fp,char format,args,...);
int fprintf(FILE *fp,char format,args,...)
参数说明:这两个函数都是变参函数,后面变量列表可以有多个。fp文件指针,format是指要规定的格式字符串,如“%d,%f”这种形式,args指的是要读写的变量列表。与scanf和printf功能类似,但是fscanf和fprintf读写的对象不是终端,而是磁盘。由于变量在内存中都是以二进制形式存储,所以使用这两个函数,总会将ASCII字符和二进制文件,进行相互转换,花费时间比较多,如果需要内存和磁盘频繁的进行数据交换时,最好选用fread和fwrite。
例子:FILE *fp=NULL;
char a[]=“hello&world”;
fp=fopen(“E:\\Code\\Test\\input.txt”,“a+”);
fprintf(fp,“%s”,a);
参考资料:[1]谭浩强《c程序设计》
[2]百度百科