_flag在FILE结构中的意义是什么?

时间:2018-06-28 10:08:49

标签: c file struct

我正在使用行业代码,其中对于某些工作流程,FILE*正在损坏。我调查了struct成员的值,发现_flag被赋予了看似较高的〜33000值。 这使我得出结论,它已损坏。

现在,我不确定如何继续进行。也许知道_flag的重要性可能会有所帮助?

1 个答案:

答案 0 :(得分:3)

我们不能肯定地说,因为FILE结构的内部是依赖于实现的,但是_flag字段通常是一个位掩码,stdio软件包用来跟踪各种选项已设置(读取,写入,行缓冲等)以及与流有关的其他各种状态位,例如是否命中EOF。

例如,在我键入此代码的系统上,<stdio.h>为自己的标志字段定义了这些值:

#define __SLBF  0x0001          /* line buffered */
#define __SNBF  0x0002          /* unbuffered */
#define __SRD   0x0004          /* OK to read */
#define __SWR   0x0008          /* OK to write */
#define __SRW   0x0010          /* open for reading & writing */
#define __SEOF  0x0020          /* found EOF */
#define __SERR  0x0040          /* found error */
#define __SMBF  0x0080          /* _buf is from malloc */
#define __SAPP  0x0100          /* fdopen()ed in append mode */
#define __SSTR  0x0200          /* this is an sprintf/snprintf string */
#define __SOPT  0x0400          /* do fseek() optimisation */
#define __SNPT  0x0800          /* do not do fseek() optimisation */
#define __SOFF  0x1000          /* set iff _offset is in fact correct */
#define __SMOD  0x2000          /* true => fgetln modified _p text */
#define __SALC  0x4000          /* allocate string space dynamically */
#define __SIGN  0x8000          /* ignore this file in _fwalk */

因此,如果设置了__SWR__SEOF__SERR__SMBF__SIGN位,则标志值将为33000。标记的组合毫无意义,但您明白了。)

最重要的是,您所看到的值应该是预期值,并且它们本身并不表示FILE结构已损坏。