(분명히) 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 종료 상태로 종료될 때까지 시작되지 않습니다.