Мы не можем сказать наверняка, потому что внутренняя структура структуры 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
повреждена.