il codice manca comunque di una cosa fondamentale:
os.write, di qualsiasi natura (ma vado a memoria, per cui potrei benissimo sbagliarmi), non garantisce che i dati nello stream siano effettivamente mandati all'output per intero. Ossia potresti trovarti col programma apparentemente a fine stream ed il buffer ancora pieno zeppo di roba. Si sistema aggiungendo un flush allo stream prima di chiuderlo. flush invece garantisce che qualsiasi cosa possa essere rimasta nello stream venga effettivamente inviata.