这种方法是在Android Recovery程序中用到。
代码
#include <stdio.h>
int main()
{
const char* LOG_FILENAME= "test.log";
freopen(LOG_FILENAME, "a", stdout);
freopen(LOG_FILENAME, "a", stderr);
printf("Hello, freopen().\n");
return 0;
}
如果日志文件没有,会自动创建。如果已经有,则在该文件后面追加内容。
freopen
C99标准中的定义:
7.19.5.4 The freopen function
- Synopsis
.
#include <stdio.h>
FILE *freopen(const char * restrict filename,
const char * restrict mode,
FILE * restrict stream);
- Description
The freopen function opens the file whose name is the string pointed to by filename and associates the stream pointed to by stream with it. The mode argument is used just as in the fopen function.229)
If filename is a null pointer, the freopen function attempts to change the mode of the stream to that specified by mode, as if the name of the file currently associated with the stream had been used. It is implementation-defined which changes of mode are permitted (if any), and under what circumstances.
The freopen function first attempts to close any file that is associated with the specified stream. Failure to close the file is ignored. The error and end-of-file indicators for the stream are cleared.
- Returns
The freopen function returns a null pointer if the open operation fails. Otherwise, freopen returns the value of stream.
229) The primary use of the freopen function is to change the file associated with a standard text stream (stderr, stdin, or stdout), as those identifiers need not be modifiable lvalues to which the value returned by the fopen function may be assigned.
《C程序设计语言(2nd) B.1 输入与输出》一节的说明:
freopen函数以mode指定的模式打开filename指定的文件,并将该文件关联到stream指定的流。它返回stream;若出错则返回NULL。freopen函数一般用于改变与stdin、stdout和stderr相关联的文件。