Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah fungsi `os.OpenFile` melemparkan ralat "deskriptor fail buruk" apabila melampirkan pada fail log dalam Go?

Mengapakah fungsi `os.OpenFile` melemparkan ralat "deskriptor fail buruk" apabila melampirkan pada fail log dalam Go?

Patricia Arquette
Patricia Arquetteasal
2024-11-11 03:53:03758semak imbas

Why is the `os.OpenFile` function throwing a

Penerangan Fail Buruk di Golang Semasa Melampirkan pada Fail Pengelogan

Apabila cuba menambah fail pengelogan dalam rutin Go, pengguna mungkin menghadapi ralat berikut:

write ./log.log: bad file descriptor

Walaupun memastikan bahawa fail sasaran wujud dan mempunyai kebenaran yang sesuai, isu ini berterusan. Percubaan awal untuk menyelesaikan isu menggunakan mutex gagal.

Penyelesaian

Penyelesaian terletak pada penambahan bendera O_WRONLY pada panggilan os.OpenFile:

if f, err := os.OpenFile("./log.log", os.O_APPEND|os.O_WRONLY, os.ModeAppend); err != nil { /*[...]*/ }

Penjelasan

Menurut dokumentasi Linux semasa terbuka, salah satu daripada mod akses berikut mesti disertakan dalam hujah bendera: O_RDONLY, O_WRONLY atau O_RDWR. Permintaan ini untuk membuka fail masing-masing dalam mod baca sahaja, tulis sahaja atau baca/tulis.

Secara lalai, panggilan os.OpenFile Go membuka fail dalam mod baca sahaja. Oleh itu, adalah perlu untuk menyatakan secara eksplisit O_WRONLY untuk membenarkan penulisan pada fail pengelogan.

Atas ialah kandungan terperinci Mengapakah fungsi `os.OpenFile` melemparkan ralat "deskriptor fail buruk" apabila melampirkan pada fail log dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn