我知道指针可以设置为null(例如,表示指向的对象不存在),并且没有有效指针指向null;可以使用fpos_t
类型完成相同的操作,这样没有有效的位置会为空吗?
答案 0 :(得分:2)
我们不知道H2CO3如何说,它是一种不透明的类型。更多以前它是未指定的,这是C99 draft standard在7.19.1
部分中所说的内容:
fpos_t
是除了能够记录所有信息的数组类型之外的对象类型 需要唯一地指定文件中的每个位置。
在7.19.9.1
部分中,fgetpos函数表示(强调我的):
#include <stdio.h>
int fgetpos(FILE * restrict stream, fpos_t * restrict pos);
fgetpos函数存储解析状态(如果有)和文件的当前值 由pos指向的对象中的流指向的流的位置指示符。 存储的值包含fsetpos函数可用的未指定信息 在调用fgetpos函数时将流重新定位到其位置。
答案 1 :(得分:0)
fpos_t
通常是无符号整数类型。在大多数系统unsigned int
,unsigned long int
或unsigned long long int
上。 Othen的类型与size_t
相同。因此,对“有效”偏移的解释取决于消耗它的函数。如果提供了无效的偏移,系统调用通常会失败EINVAL
。
无效偏移通常被称为“偏移太大”。某些系统调用也可能需要将偏移量与页面边界对齐。
如果您希望“无效”偏移,我建议您尝试将其设置为尽可能大的(fpos_t)-1
。但是没有普遍的方法。
答案 2 :(得分:0)
这是一个C ++问题而非C问题,因为 fpos_t
不是我所知的C标准的一部分。
在C ++中,fpos_t
被定义为“非数组类型,包含指定文件中每个位置所需的所有信息”。看到:
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdio.h.html#tag_13_49
我相信它通常是一个结构,虽然理论上它可能是一个指针。但是,它的实现已定义。因此,它不能(可靠地和可移植地)成为NULL
,并且通常会失败。
在C中(你每天都学到新东西),它仍然是一种不透明的类型。见例如: http://www.gnu.org/software/libc/manual/html_node/Portable-Positioning.html
在GNU C库中,fpos_t是一个不透明的数据结构,包含表示文件偏移和转换状态信息的内部数据。在其他系统中,它可能具有不同的内部表示。
答案 3 :(得分:0)
fpos_t对象的内容不是直接读取的,而只是在调用fsetpos时用作参数。