Jawabannya sedikit tergantung pada apa file.txtitu, dan bagaimana proses menulisnya!
Saya akan mengutip kasus penggunaan umum: Anda memiliki logfile yang sedang tumbuh dipanggil file.txt, dan ingin memutarnya.
Karena itu Anda menyalin, misalnya, file.txtke dalam file.txt.save, lalu memotong file.txt.
Dalam skenario ini, JIKA file tidak dibuka oleh another_process(mis: another_processbisa berupa program keluaran ke file itu, misalnya program mencatat sesuatu), maka 2 proposal Anda setara, dan keduanya berfungsi dengan baik (tetapi yang kedua lebih disukai sebagai pertama "cat / dev / null> file.txt" adalah Penggunaan Cat yang Tidak Berguna dan juga terbuka dan membaca / dev / null).
Tetapi masalah sebenarnya adalah jika other_processmasih aktif, dan masih memiliki pegangan terbuka ke file.txt.
Kemudian, 2 kasus utama muncul, tergantung pada seberapa other processmembuka file:
Jika other_processmembukanya dengan cara normal, maka pegangan akan tetap menunjuk ke lokasi sebelumnya dalam file, misalnya pada offset 1200 byte. Oleh karena itu, penulisan berikutnya akan dimulai pada offset 1200, dan dengan demikian Anda akan memiliki lagi file sebesar 1200bytes (+ apa pun yang ditulis_proses lain), dengan 1200 karakter null terkemuka! Bukan apa yang Anda inginkan , saya kira.
Jika other_processdibuka file.txtdi "append mode", maka setiap kali ia menulis, pointer akan secara aktif mencari ke akhir file. Karena itu, ketika Anda memotongnya, ia akan "mencari" sampai byte 0, dan Anda tidak akan memiliki efek samping yang buruk! Ini yang Anda inginkan (... biasanya!)
Perhatikan bahwa ini berarti Anda perlu, ketika Anda memotong file, untuk memastikan bahwa semua yang other_processmasih menulis ke lokasi itu telah membukanya dalam mode "append". Jika tidak, Anda harus menghentikannya other_process, dan mulai lagi, sehingga mereka mulai menunjuk di awal file alih-alih lokasi sebelumnya.
Referensi: /programming//a/16720582/1841533 untuk penjelasan yang lebih bersih, dan contoh singkat yang bagus tentang perbedaan antara mode log normal dan append logging di /programming//a/984761/1841533