$ cat double-close.c #include #include void test() { int fd = open("test.txt", O_RDONLY); close(fd); close(fd); } int main() {} $ gcc-11.2.0 double-close.c -fanalyzer double-close.c: In function ‘test’: double-close.c:7:3: warning: double close on fd [-Wanalyzer-double-fclose] 7 | close(fd); | ^~~~~~~~~ ‘test’: events 1-3 | | 5 | int fd = open("test.txt", O_RDONLY); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (1) opened here | 6 | close(fd); | | ~~~~~~~~~ | | | | | (2) first ‘close’ here | 7 | close(fd); | | ~~~~~~~~~ | | | | | (3) second ‘close’ was here; first ‘close’ was at (2) | $ cat dup.c #include #include void test() { int fd = open("test.txt", O_RDONLY); close(fd); int fd2 = dup(fd); } int main(){} $ gcc-11.2.0 dup.c -fanalyzer dup.c: In function ‘test’: dup.c:7:19: warning: dup on closed fd [-Wanalyzer-double-fclose] 7 | int fd2 = dup(fd); | ^~~~~~~ ‘test’: events 1-3 | | 5 | int fd = open("test.txt", O_RDONLY); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (1) opened here | 6 | close(fd); | | ~~~~~~~~~ | | | | | (2) first ‘close’ here | 7 | int fd2 = dup(fd); | | ~~~~~~~ | | | | | (3) dup on closed file-descriptor ‘fd’ was called here which was closed at (2) | $ cat read-write.c #include #include #include void test () { int fd = open ("text", O_RDONLY); close(fd); write(fd, "hello", 5); //write in closed fd char * s = (char *) malloc(2); read(fd, s, 2); //read on closed fd free(s); } void main(){} $ gcc-11.2.0 read-write.c -fanalyzer read-write.c: In function ‘test’: read-write.c:9:9: warning: write on closed fd [-Wanalyzer-double-fclose] 9 | write(fd, "hello", 5); //write in closed fd | ^~~~~~~~~~~~~~~~~~~~~ ‘test’: events 1-3 | | 7 | int fd = open ("text", O_RDONLY); | | ^~~~~~~~~~~~~~~~~~~~~~~ | | | | | (1) opened here | 8 | close(fd); | | ~~~~~~~~~ | | | | | (2) first ‘close’ here | 9 | write(fd, "hello", 5); //write in closed fd | | ~~~~~~~~~~~~~~~~~~~~~ | | | | | (3) write on closed file-descriptor ‘fd’ was called here which was closed at (2) | read-write.c:11:9: warning: read on closed fd [-Wanalyzer-double-fclose] 11 | read(fd, s, 2); //read on closed fd | ^~~~~~~~~~~~~~ ‘test’: events 1-3 | | 7 | int fd = open ("text", O_RDONLY); | | ^~~~~~~~~~~~~~~~~~~~~~~ | | | | | (1) opened here | 8 | close(fd); | | ~~~~~~~~~ | | | | | (2) first ‘close’ here |...... | 11 | read(fd, s, 2); //read on closed fd | | ~~~~~~~~~~~~~~ | | | | | (3) read on closed file-descriptor ‘fd’ was called here which was closed at (2) |