STINNER Victor added the comment: "In Python 2, a buffered file opened for writing is flushed by the C library when the process exit."
"When you say Python 2, I assume you mean CPython 2, right? Because - AFAICT - files got flushed only by accident, not by design." It looks to be a feature of the standard C library, at least the GNU libc. Its libio library installs an exit handler flushing all open files. You can see it if you set a breaking on write() using gdb: Breakpoint 5, write () at ../sysdeps/unix/syscall-template.S:82 82 ../sysdeps/unix/syscall-template.S: Aucun fichier ou dossier de ce type. (gdb) where #0 write () at ../sysdeps/unix/syscall-template.S:82 #1 0xb7e33ba5 in _IO_new_file_write (f=0x8254ef0, data=0x81f9798, n=3) at fileops.c:1289 #2 0xb7e33a84 in new_do_write (fp=0x8254ef0, data=0x81f9798 "bar\267\300\207\366\267\220\227\037\b\220\227\037\b\004d", to_do=3) at fileops.c:543 #3 0xb7e350fe in _IO_new_do_write (fp=0x8254ef0, data=0x81f9798 "bar\267\300\207\366\267\220\227\037\b\220\227\037\b\004d", to_do=3) at fileops.c:516 #4 0xb7e354b5 in _IO_new_file_overflow (f=0x8254ef0, ch=-1) at fileops.c:894 #5 0xb7e36c40 in _IO_flush_all_lockp (do_lock=0) at genops.c:849 #6 0xb7e36d8e in _IO_cleanup () at genops.c:1010 #7 0xb7df5f92 in __run_exit_handlers (status=0, listp=0xb7f683e4, run_list_atexit=true) at exit.c:91 #8 0xb7df5fdd in __GI_exit (status=0) at exit.c:100 #9 0xb7ddc4db in __libc_start_main (main=0x8058f90 <main>, argc=2, ubp_av=0xbffff1b4, init=0x8156960 <__libc_csu_init>, fini=0x81569d0 <__libc_csu_fini>, rtld_fini=0xb7fed280 <_dl_fini>, stack_end=0xbffff1ac) at libc-start.c:258 #10 0x08058fd1 in _start () Source of _IO_flush_all_lockp() in the GNU libc: http://sourceware.org/git/?p=glibc.git;a=blob;f=libio/genops.c;h=390d8d24b5fb04f6a35b8fec27e700b9a9d641d4;hb=HEAD#l816 So the glibc maintains a list of open "FILE*" files: _IO_list_all, which is protected by list_all_lock lock. ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue17852> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com