k&r fopen 和 fillbuf
k&r fopen and fillbuf
我有一个关于堆栈溢出问题的问题:- 。在这个问题中,讨论了 struct _iobuf 中的标志。这些被用作不同的访问模式。但是在下面的枚举标志中,有一些特定的标志值。那么 'flag' 将仅采用这些特定值,还是这些是一些标准值,而 flag 也可以采用其他一些值?我的疑问来自于这样一个事实,即在定义数组 _iob 时,只给出了三个标准值(用于 stdin、stdout、stderr)(共 20 个),因此 fp 也可以采用其他一些值(同时有 17 个) .第二个疑问是,如果 flag 只能采用定义的值,如(_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 标志。
我有一个关于堆栈溢出问题的问题:-
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 标志。