浅谈一些与文件相关的函数

一、fopen函数

1.1 使用格式

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

1.2 函数的功能
打开文件(open file)
打开名称在参数filename中指定的文件,并将其与可在将来操作中通过返回的FILE指针识别的流相关联。

流上允许的操作及其执行方式由mode参数定义。如果已知未引用交互式设备(请参阅setbuf),则默认情况下,返回的流将完全缓冲。 可以通过调用fclose或freopen将返回的指针与文件解除关联。正常程序终止时,所有打开的文件将自动关闭。

1.3 函数参数

文件名(filename)
包含要打开的文件名的C字符串。
其值应遵循运行环境的文件名规范,并且可以包含路径(如果系统支持)。

模式(mode)

模式 功能
“r” read:打开文件进行输入操作。该文件必须存在。
“w” write:为输出操作创建一个空文件。如果已存在具有相同名称的文件,则会丢弃其内容,并将该文件视为新的空文件。
“a” append:打开文件末尾的输出文件。输出操作总是在文件末尾写入数据,并将其扩展。重新定位操作(fseek,fsetpos,rewind)将被忽略。如果文件不存在,则创建该文件。
“r+” read/update:打开文件进行更新(包括输入和输出)。该文件必须存在。
“w+” write/update:创建一个空文件并打开它进行更新(包括输入和输出)。如果已存在具有相同名称的文件,则会丢弃其内容,并将该文件视为新的空文件。
“a+” append / update:打开一个文件进行更新(包括输入和输出),所有输出操作都在文件末尾写入数据。重新定位操作(fseek,fsetpos,rewind)会影响下一个输入操作,但输出操作会将位置移回文件末尾。如果文件不存在,则创建该文件。

1.4 返回值
如果文件成功打开,则该函数返回指向FILE对象的指针,该对象可用于在将来的操作中标识流。
否则,返回空指针。
在大多数库实现中,errno变量也会在失败时设置为特定于系统的错误代码。

1.5 使用案例

/* fopen example */
#include <stdio.h>
int main()
{
	FILE * pFile;
	pFile = fopen("myfile.txt", "w");
	if (pFile != NULL)
	{
		fputs("fopen example", pFile);
		fclose(pFile);
	}
	return 0;
}

二、fclose函数

2.1 使用格式

int fclose(FILE * stream);

2.2 函数功能

关闭文件(一般与fopen函数配套使用)
关闭与流关联的文件并取消关联。
与流关联的所有内部缓冲区都与其解除关联并刷新:写入任何未写入的输出缓冲区的内容,并丢弃任何未读输入缓冲区的内容。
即使调用失败,作为参数传递的流也将不再与文件及其缓冲区相关联。
2.3 函数参数

stream
指向FILE对象的指针,指定要关闭的流。

2.4 函数返回值
如果成功关闭流,则返回零值。
失败时,返回EOF。

2.5 使用案例

/* fclose example */
#include <stdio.h>
int main()
{
	FILE * pFile;
	pFile = fopen("myfile.txt", "wt");
	fprintf(pFile, "fclose example");
	int ret = fclose(pFile);
	printf("%d\n", ret);
	return 0;
}

浅谈一些与文件相关的函数

三、fputs函数

3.1 使用格式

int fputs(const char * str,FILE * stream);

3.2 函数功能

将字符串写入流
写C字符串被指出STR的数据流。
该函数从指定的地址(str)开始复制,直到到达终止空字符(’\0’)。此终止空字符不会复制到流中。
注:fputs与puts有所不同,因为可以指定目标流,而且fputs不会写入其他字符,而puts会自动在末尾添加换行符。

3.3 函数参数
str
带有要写入流的内容的C字符串。
stream
指向标识输出流的FILE对象的指针。

3.4 函数返回值
成功时,返回非负值。
出错时,该函数返回EOF并设置错误指示符(ferror)。

3.5 使用案例

/* fputs example */
#include <stdio.h>

int main()
{
	FILE * pFile;
	char sentence[256];

	printf("Enter sentence to append: ");
	fgets(sentence, 256, stdin);
	pFile = fopen("mylog.txt", "a");
	fputs(sentence, pFile);
	fclose(pFile);
	return 0;
}

浅谈一些与文件相关的函数

四、fseek函数

4.1 使用格式

int fseek(FILE * stream,long int offset,int origin);

4.2 函数功能

重新定位流位置指示器
将与流关联的位置指示器设置为新位置。

1、对于以二进制模式打开的流,通过将偏移添加到由origin指定的参考位置来定义新位置。
2、对于在文本模式下打开的流,offset应为零或前一次调用ftell返回的值,而origin必须为SEEK_SET。

4.3 函数参数

stream
指向标识流的FILE对象的指针。
offset
二进制文件:从原点偏移的字节数。
文本文件:零或ftell返回的值。
origin
位置用作偏移的参考。它由中定义的以下常量之一指定,专门用作此函数的参数:

constant Reference position
SEEK_SET 文件开头
SEEK_CUR 文件指针的当前位置
SEEK_END 文件结束

允许库实现无意义地支持SEEK_END(因此,使用它的代码没有真正的标准可移植性)。

4.4 函数返回值
如果成功,该函数返回零。
否则,它返回非零值。
如果发生读或写错误,则设置错误指示符(ferror)。

4.5 使用案例

/* fseek example */
#include <stdio.h>

int main()
{
	FILE * pFile;
	pFile = fopen("example.txt", "wb");
	fputs("This is an apple.", pFile);
	fseek(pFile, 9, SEEK_SET);
	fputs(" sam", pFile);
	fclose(pFile);
	return 0;
}

浅谈一些与文件相关的函数
下面我们来看一个关于fseek函数的题目
浅谈一些与文件相关的函数
解析:int fseek(FILE *stream, long offset, int fromwhere);描 述: 函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。返回值: 成功,返回0,否则返回其他值。
第一个参数stream为文件指针。
第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移。
第三个参数origin设定从文件的哪里开始偏移
SEEK_SET: 文件开头,
SEEK_CUR: 当前位置,
SEEK_END: 文件结尾。
其中SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2)
因此,fseek(fp,-20L,2)的含义是把文件指针fp指向文件结尾偏移-20字节处。

上一篇:ORA-00600: internal error code, arguments: [kdBlkCheckError]


下一篇:skills_docker