fsetpos ()- 设置文件位置
格式
#include <stdio.h>
int fsetpos(FILE *stream, const fpos_t *pos);语言级别
ANSI
线程安全
是
描述
fsetpos() 函数根据 pos指向的值将与 流 关联的任何文件位置移动到文件中的新位置。 pos 的值是通过先前对 fgetpos() 库函数的调用获取的。
如果成功, fsetpos() 将清除文件结束指示符,并撤销任何先前 ungetc() 函数对同一流的影响。
在 fsetpos() 调用之后,可以输入或输出处于更新方式的流上的下一个操作。
返回值
如果 fsetpos() 成功更改文件的当前位置,那么将返回 0。 非零返回值指示错误。
errno 的值可以设置为:
- 值
- 含义
- EBADF
- 文件指针或描述符无效。
- EBADPOS
- 指定的位置无效。
- EINVAL
- 为自变量指定的值不正确。 当您使用 *IFSIO 编译程序并且正在使用 QSYS 文件系统中的文件时,可能会收到此错误号。 例如,
"/qsys.lib/qtemp.lib/myfile.file/mymem.mbr"。 - ENODEV
- 在错误的设备上尝试了操作。
- ENOPOS
- 在指定位置没有记录。
- ERECIO
- 文件已打开以进行记录 I/O。
- ESTDERR
- 无法打开
stderr。 - 埃斯特丁
- 无法打开
stdin。 - ESTDOUT
- 无法打开
stdout。 - EIOERROR
- 发生了不可恢复的I/O错误。
- EIORECERR
- 发生了可恢复的I/O错误。
fsetpos() 函数不能用于使用 type=record打开的文件。 此外,在以下情况下, fsetpos() 函数只能支持将位置设置为文件开头:- 您的程序是使用 *IFSIO 编译的,并且
- 您正在处理 QSYS 文件系统中的文件。
示例
此示例打开文件 mylib/myfile 以进行读取。 执行输入操作后,
fsetpos() 会将文件指针移动到文件开头,并重新读取第一个字节。#include <stdio.h>
FILE *stream;
int main(void)
{
int retcode;
fpos_t pos;
char ptr[20]; /* existing file 'mylib/myfile' has 20 byte records */
int i;
/* Open file, get position of file pointer, and read first record */
stream = fopen("mylib/myfile", "rb");
fgetpos(stream,&pos);
if (!fread(ptr,sizeof(ptr),1,stream))
perror("fread error");
else printf("1st record: %s\n", ptr);
/* Perform another read operation on the second record */
/* - the value of 'pos' changes */
if (!fread(ptr,sizeof(ptr),1,stream))
perror("fread error");
else printf("2nd record: %s\n", ptr);
/* Re-set pointer to start of file and re-read first record */
fsetpos(stream,&pos);
if (!fread(ptr,sizeof(ptr),1,stream))
perror("fread error");
else printf("1st record again: %s\n", ptr);
fclose(stream);
}