fpos_t类型可以取空值吗?

时间:2014-01-17 17:31:38

标签: c

我知道指针可以设置为null(例如,表示指向的对象不存在),并且没有有效指针指向null;可以使用fpos_t类型完成相同的操作,这样没有有效的位置会为空吗?

4 个答案:

答案 0 :(得分:2)

我们不知道H2CO3如何说,它是一种不透明的类型。更多以前它是未指定的,这是C99 draft standard7.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 intunsigned long intunsigned 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时用作参数。