重定向
描述
C 库函数 FILE *freopen(const char *filename, const char *mode, FILE *stream) 把一个新的文件名 filename 与给定的打开的流 stream 关联,同时关闭流中的旧文件。
声明
FILE *freopen(const char *filename, const char *mode, FILE *stream)
参数
- filename – 这是 C 字符串,包含了要打开的文件名称。
- mode – 这是 C 字符串,包含了文件访问模式,模式如下:
模式 | 描述 |
---|---|
“r” | 打开一个用于读取的文件。该文件必须存在。 |
“w” | 创建一个用于写入的空文件。如果文件名称与已存在的文件相同,则会删除已有文件的内容,文件被视为一个新的空文件。 |
“a” | 追加到一个文件。写操作向文件末尾追加数据。如果文件不存在,则创建文件。 |
“r+” | 打开一个用于更新的文件,可读取也可写入。该文件必须存在。 |
“w+” | 创建一个用于读写的空文件。 |
“a+” | 打开一个用于读取和追加的文件。 |
- stream – 这是指向 FILE 对象的指针,该 FILE 对象标识了要被重新打开的流。
例子
#include<stdio.h>
int main()
{
FILE *fp = freopen("stdout.txt", "w", stdout);
if(fp == NULL)
{
printf("freopen failed\n");
}
puts("a");
puts("b");
fclose(stdout);
puts("c");
puts("d");
freopen("CON", "w", stdout);
puts("1");
puts("2");
fclose(fp);
return 0;
}
标准库函数fseek()
描述
C 库函数 int fseek(FILE *stream, long int offset, int whence) 设置流 stream 的文件位置为给定的偏移 offset,参数 offset 意味着从给定的 whence 位置查找的字节数。
声明
int fseek(FILE *stream, long int offset, int whence)
参数
- stream – 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
- offset – 这是相对 whence 的偏移量,以字节为单位。
- whence – 这是表示开始添加偏移 offset 的位置。它一般指定为下列常量之一:
常量 | 描述 |
---|---|
SEEK_SET | 文件的开头 |
SEEK_CUR | 文件指针的当前位置 |
SEEK_END | 文件的末尾 |
返回值
如果成功,则该函数返回零,否则返回非零值。
例子
#include<stdio.h>
typedef struct info
{
int id;
char name[20];
float money;
}Emp;
Emp emps[4] = {{2208, "zhangsan", 10000},
{2107, "lisi", 12000},
{2109, "wangwu", 13000},
{2003, "xiaoming", 15000}};
int main()
{
int i;
FILE *fp = fopen("./1.txt", "w+");
for(i = 0; i < 4; i++)
{
fprintf(fp, "%d %s %f\n", emps[i].id, emps[i].name, emps[i].money);
}
fseek(fp, -23, SEEK_END);
fputs("wangming", fp);
fseek(fp, -42, SEEK_END);
fputs("15000", fp);
return 0;
}