배관 입력과 판독 입력의 차이

배관 입력과 판독 입력의 차이

(분명히) tmp 파일을 생성하는 것 외에 cmd1 > tmp && cmd2 < tmp와 ?의 차이점은 무엇입니까?cmd1 | cmd2

cmd2파이프에 대한 나의 이해가 정확하다면 다음을 읽고 싶습니다.표준 입력두 경우 모두 출력되므로 cmd1두 경우 모두 동일한 동작이 예상됩니다.

그러나이 바둑 프로그램표준 입력을 읽으면 파이프에서 예상대로 작동하지만 두 번째 양식의 경우 입력이 수신되지 않은 것처럼 동작합니다.

답변1

바둑 프로그램이 보인다분명히표준 입력이 파이프인지 테스트하고 그렇지 않은 경우 진단 메시지와 함께 종료됩니다.

fi, err := os.Stdin.Stat()
if err != nil {
        fatal(err)
}
if fi.Mode()&os.ModeNamedPipe == 0 {
        usage()
        os.Exit(1)
}

두 명령줄의 또 다른 차이점은 파이프를 사용할 때 두 명령이 동시에 실행된다는 것입니다. 왼쪽 명령은 쓰기, 오른쪽 명령은 읽기입니다. 한 프로그램이 다른 프로그램보다 읽기/쓰기 측면에서 너무 느린 경우 느린 프로그램이 따라잡을 때까지 더 빠른 프로그램이 일시적으로 차단됩니다.

&&두 개의 명령이 중간에 실행되는 경우 분명히 서로 후에 실행됩니다. 두 번째 명령은 첫 번째 명령이 완료되고 0 종료 상태로 종료될 때까지 시작되지 않습니다.

관련 정보