fsetpos() fgetpos()详解

简介: fsetpos()详解 函数原型:int fsetpos(FILE *fp, const fpos_t *pos); 头文件:#include 是否是标准函数:是 函数功能:将文件指针定位在pos指定的位置上。

fsetpos()详解

函数原型:int fsetpos(FILE *fp, const fpos_t *pos);

头文件:#include<stdio.h>

是否是标准函数:是

函数功能:将文件指针定位在pos指定的位置上。该函数的功能与前面提到的fgetpos相反,是将文件指针fp按照pos指定的位置在文件中定位。pos值以内部格式存储,仅由fgetpos和fsetpos使用。

返回值:成功返回0,否则返回非0。

例程如下 应用fsetpos函数定位文件指针。

#include <stdio.h>

void main( void )

{

FILE *fp;

fpos_t pos;

char buffer[50];

 

if( (fp = fopen( "test.txt", "rb" )) == NULL )

printf( "Trouble opening file/n" );

else

{

 

pos = 10;

 

if( fsetpos( fp, &pos ) != 0 )

perror( "fsetpos error" );

else

{

 

fread( buffer, sizeof( char ), 16, fp );

 

printf( "16 bytes at byte %ld: %.16s/n", pos, buffer );

}

}

fclose( fp );

}

例程说明:

(1)首先,程序以只读方式打开名为test.txt的文件。在这里,test.txt文件中已存入字符串This is a test for testing the function of fsetpos.

(2)将pos设置为10。应用fsetpos函数将文件指针fp按照pos指定的位置在文件中定位。这样文件指针fp指向字符串中test的字母t。

(3)再从新定位的文件指针开始读取16个字符到buffer缓冲区,也就是说读取字符串"test for testing"到缓冲区buffer。

(4)最后显示结果:16 bytes at byte 10: test for testing 。

fgetpos:取得当前文件的句柄函数

函数原型:int fgetpos( FILE *stream, fpos_t *pos );

头文件:#include<stdio.h>

是否是标准函数:是

函数功能:取得当前文件的指针所指的位置,并把该指针所指的位置数存放到pos所指的对象中。pos值以内部格式存储,仅由fgetpos和fsetpos使用。其中fsetpos的功能与fgetpos相反,为了详细介绍,将在后节给与说明。

返回值:成功返回0,失败返回非0,并设置errno。

例程如下:应用fgetpos函数取得当前文件的指针所指的位置。

#include <string.h>

#include <stdio.h>

int main(void)

{

FILE *fp;

char string[] = "This is a test";

fpos_t pos;

 

fp = fopen("test.txt", "w+");

 

fwrite(string, strlen(string), 1, fp);

 

fgetpos(fp, &pos);

printf("The file pointer is at byte %ld/n", pos);

 

fseek(fp,3,0);

 

fgetpos(fp, &pos);

printf("The file pointer is at byte %ld/n", pos);

fclose(fp);

return 0;

}

例程说明:

(1)首先,程序以读写方式打开一个名为test.txt的文件,并把字符串"This is a test"写入文件。注意:字符串共14个字节,地址为0~13。用fwrite函数写入后,文件指针自动指向文件最后一个字节的下一个位置。即这时的fp的值应该是14。

(2)再用fgetpos函数取得指针位置并存入&pos所指向的对象,此时, pos中的内容为14。然后在屏幕上显示出The file pointer is at byte 14。

(3)再用fseek函数重设文件指针的位置,让fp的值为3,即指向文件中第4个字节。

再次取得指针位置并存入&pos所指向的对象。然后在屏幕上显示出The file pointer is at byte 3。

目录
相关文章
|
Windows 计算机视觉 安全
流媒体技术学习笔记之(十三)Windows安装FFmpeg
一、下载地址: 网址:https://ffmpeg.org/ 选择Windows版本:https://ffmpeg.org/download.html#build-windows 二、解压安装: 下载并解压FFmpeg文件夹,它会生成一个类似名为“ffmpeg-20150504-git-eb9fb50-win32-static”的新文件夹:   打开你想安装的任意磁盘,例如:d盘。
2919 0
|
8月前
|
人工智能 数据库
数据库系统概论 ---- 第二章 -- 关系数据库(2.4 关系代数)(上)
数据库系统概论 ---- 第二章 -- 关系数据库(2.4 关系代数)
|
8月前
|
编解码 缓存 算法
h264编码流程分析
h264编码流程分析
220 0
|
9月前
|
编解码 Java 程序员
Android入门教程 (二) 第一个App HelloWorld
Android入门教程 (二) 第一个App HelloWorld
283 0
|
8月前
|
容器
yuv色彩空间和色彩范围
yuv色彩空间和色彩范围
116 0
|
9月前
|
Web App开发 存储 缓存
ptmalloc、tcmalloc与jemalloc对比分析(三)
ptmalloc、tcmalloc与jemalloc对比分析(三)
712 0
|
开发工具 git
如何使用TortoiseGit指北,一篇讲清(下)
如何使用TortoiseGit指北,一篇讲清(下)
如何使用TortoiseGit指北,一篇讲清(下)
|
编译器 程序员 Linux
C++ 中的内存对齐——实践篇
> 本文为《C++ 中的内存对齐》系列之下篇,[上篇](https://ata.alibaba-inc.com/articles/243681)介绍内存对齐的理论基础,建议优先食用~ ### TL;DR - 编译器可能会在结构体中填充字节,以满足所有成员的对齐要求; - 可以通过预处理指令 `#pragma pack` 及 `alignas` 标识符自定义内存对齐; - 对于栈上及静态变量,编
1518 0
|
编解码 算法
白话H.265/HEVC和H.264/AVC编码结构
写在前面 在信息化时代,视频技术和应用的发展,特别是高清(HD)、超高清(UHD)、多视点(MultiView)视频、VR/AR技术的兴起,海量的视频信息已如潮涌般深入到我们工作和生活的方方面面。随着5G通信技术逐渐铺开落地,移动端设备的传输数据量会进一步增加。
2434 0
批处理比较数值大小 lss,equ和gtr的用法 if中gtr的特殊应用
转自:http://hi.baidu.com/fairsky007/blog/item/0d8a10850aad1124c75cc3e3.html 批处理比较数值大小 lss,equ和gtr的用法 电脑综合 2010-04-17 14:18:39 阅读196 评论0 ...
4902 0