The man-page of fsync(2) has the next error description: EBADF fd is not a valid file descriptor open for writing. This man-page says nothing about if fsync(2) works correctly on a file descriptor open with O_RDONLY, but it seems to work without any problem. So that description induce to think that O_WRONLY or O_RDWR must be used. The Open Group Base Specifications says nothing about in what mode the file must be open. And the EBADF error description also says nothing about not being open in writing mode (http://pubs.opengroup.org/onlinepubs/009695399/functions/fsync.html). In conclusion, as far as I know, the next code snippet is correct and seems to work correctly in my machine with regular files and directories: fd = open(path, O_RDONLY); fsync(fd); So the EBADF error description in man pages from fsync(2) is confusing, maybe it should be something like: EBADF fd is not a valid file descriptor. I'm using Ubuntu 10.10 with Linux man-pages 3.24.
man-pages 3.51 fsync(2): EBADF fd is not a valid open file descriptor. I think this bug should be closed.