我有一个关于堆栈溢出问题的问题:- 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/