>  기사  >  백엔드 개발  >  Go에서 파일에 추가하면 "잘못된 파일 설명자" 오류가 발생하는 이유는 무엇입니까?

Go에서 파일에 추가하면 "잘못된 파일 설명자" 오류가 발생하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-11 15:56:03715검색

Why Does Appending to a File Result in a

파일 추가를 시도하는 동안 잘못된 파일 설명자가 발견되었습니다

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.