> 백엔드 개발 > Golang > Go에서 차단하지 않고 STDIN에서 읽을 수 있는 콘텐츠를 어떻게 감지할 수 있나요?

Go에서 차단하지 않고 STDIN에서 읽을 수 있는 콘텐츠를 어떻게 감지할 수 있나요?

Patricia Arquette
풀어 주다: 2024-12-15 21:00:18
원래의
276명이 탐색했습니다.

How Can I Detect Readable Content on STDIN in Go Without Blocking?

Go의 STDIN에서 읽을 수 있는 콘텐츠 감지

STDIN의 입력 여부에 따라 명령줄 도구가 다르게 동작하도록 하려고 한다고 가정해 보겠습니다. 그러나 ioutil.ReadAll(os.Stdin)을 직접 사용하면 예상치 못한 동작이 발생할 수 있습니다.

특히 STDIN 입력 없이 도구를 호출하면 프로그램이 입력을 무기한 대기하여 진행이 불가능하게 됩니다. 추가.

해결책

이 문제를 해결하려면 os.Stdin.Stat()를 활용하여 STDIN 파일 설명자는 문자 장치입니다. 다음 코드 조각은 이를 달성하는 방법을 보여줍니다.

package main

import (
    "fmt"
    "os"
)

func main() {
    stat, _ := os.Stdin.Stat()
    if (stat.Mode() & os.ModeCharDevice) == 0 {
        fmt.Println("data is being piped to stdin")
    } else {
        fmt.Println("stdin is from a terminal")
    }
}
로그인 후 복사

STDIN 파일에 대해 ModeCharDevice 플래그가 지워지면 데이터가 STDIN으로 파이프되고 있음을 나타냅니다. 그렇지 않으면 STDIN이 터미널에 연결되어 있음을 나타냅니다. 이 플래그를 확인하면 프로그램을 차단하지 않고도 STDIN에서 읽을 내용이 있는지 확인할 수 있습니다.

위 내용은 Go에서 차단하지 않고 STDIN에서 읽을 수 있는 콘텐츠를 어떻게 감지할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿