我正在使用行业代码,其中对于某些工作流程,FILE*
正在损坏。我调查了struct成员的值,发现_flag
被赋予了看似较高的〜33000值。
这使我得出结论,它已损坏。
现在,我不确定如何继续进行。也许知道_flag
的重要性可能会有所帮助?
答案 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
结构已损坏。