On Tue, Nov 15, 2022 at 7:26 PM Japin Li <japi...@hotmail.com> wrote:
> > On Wed, 16 Nov 2022 at 11:15, Ted Yu <yuzhih...@gmail.com> wrote: > > On Tue, Nov 15, 2022 at 7:12 PM Japin Li <japi...@hotmail.com> wrote: > >> After some rethinking, I find the origin code do not have problems. > >> > >> If fd is NULL or fgets() returns NULL, the process exits. Otherwise, we > >> call > >> pclose() to close fd. The code isn't straightforward, however, it is > >> correct. > > Hi, Please take a look at the following: https://en.cppreference.com/w/c/io/fgets Quote: If the failure has been caused by some other error, sets the *error* indicator (see ferror() <https://en.cppreference.com/w/c/io/ferror>) on stream. The contents of the array pointed to by str are indeterminate (it may not even be null-terminated). I think we shouldn't assume that the fd doesn't need to be closed when NULL is returned from fgets(). Cheers