c - k&r fopen 和 fillbuf

标签 c fopen

我有一个关于堆栈溢出问题的问题:- segmentation fault on c K&R fopen and fillbuf .在这个问题中,讨论了 struct _iobuf 中的标志。这些被用作不同的访问模式。但是在下面的枚举标志中,有一些特定的标志值。那么“标志”是否仅采用这些特定值,或者这些是一些标准值,而标志也可以采用其他一些值?我的疑问来自于这样一个事实,即在定义数组 _iob 时,只给出了三个标准值(用于 stdin、stdout、stderr)(共 20 个),因此 fp 也可以采用其他一些值(同时有 17 个其他值) .第二个疑问是,如果标志只能采用定义的值,如(_READ、_WRITE 等),则在 int _fillbuf() 函数中代替写入

if((fp->flag & (_READ|_EOF|_ERR))!=_READ)

我们可以这样写吗

if((fp->flag==_WRITE || fp->flag== _UNBUF))

因为在给定的固定标志值之外它仍然有意义。

最佳答案

枚举值是标志位,flag 成员可以设置其中的几个。 (并非所有组合都有意义,但很多是有意义的;__READ__EOF__ERR 标志相互独立,所有八种组合都是可能的.).

因此

if((fp->flag & (_READ|_EOF|_ERR))!=_READ)

测试文件是否已打开以供读取,并且既没有设置错误也没有设置 EOF 标志。

关于c - k&r fopen 和 fillbuf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50598201/

相关文章:

C-错误 : expected identifier or '(' before 'void'

c - C 函数 crypt() 是否存在已知问题?

c - strtok() 段错误

c - fopen 创建文件 : Access modes Conversion

c++ - Win32 中的全局(进程范围)属性

创建一个使用 2 个不同 ISA 的程序

c++ - 程序无法打开文件,但文件已经存在

python - 从经常更新的文件中读取

c - 更多地了解 fseek() 和 EOF IN C

c++ - 如何读取包含 '\0' 个字符的文件?