파일 추가를 시도하는 동안 잘못된 파일 설명자가 발견되었습니다
Go 루틴 내에서 로깅 파일에 추가하려고 하면 오류가 발생할 수 있습니다. "./log.log 쓰기: 잘못된 파일 설명자". 파일의 존재와 적절한 권한(666)에도 불구하고 이 문제가 지속됩니다.
처음에는 여러 go 루틴에 의한 동시 파일 액세스가 원인으로 의심되었습니다. 그러나 뮤텍스를 구현해도 문제가 해결되지 않았습니다.
해결책
해결 방법은 파일을 여는 동안 O_WRONLY 플래그를 추가하는 것입니다.
if f, err := os.OpenFile("./log.log", os.O_APPEND|os.O_WRONLY, os.ModeAppend); err != nil { /*[...]*/ }
설명
에 따르면 개방형 Linux 문서에서는 세 가지 액세스 모드(O_RDONLY, O_WRONLY 또는 O_RDWR) 중 하나를 지정해야 합니다. 이러한 모드는 각각 읽기 전용, 쓰기 전용 또는 읽기/쓰기로 파일 열기를 요청합니다.
기본적으로 파일 설명자는 읽기 전용 모드로 열리며, 이는 /의 다음 코드로 확인됩니다. usr/local/go/src/syscall/zerrors_linux_amd64.go:
O_RDONLY = 0x0 O_RDWR = 0x2 O_WRONLY = 0x1
따라서 O_WRONLY를 명시적으로 지정하면 파일이 쓰기 전용 모드로 열려 초기 문제가 해결되었습니다.
위 내용은 Go에서 파일에 추가하면 '잘못된 파일 설명자' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!