선생님은 파이프를 사용하여 입력 파일에서 테스트 사례를 가져오는 작업자 프로그램에 테스트 사례 목록이 포함된 텍스트 파일을 적용하라고 말했습니다. 내가 가지고 있다고 말해
test_cases.txt
my_program //my java program after compliation
내가 할 때
java my_program | test_cases.txt
그것은 준다
[1]+ Stopped java my_program | test_cases.txt
파이프 사용법을 모르시는 분..
답변1
먼저 파이프가 두 개를 연결합니다.프로세스, 파일(텍스트 파일 포함) 대신 한 파일의 출력이 다른 파일의 입력으로 이동되도록 합니다. 출력을 "생성"하는 프로세스가 이를 STDOUT
파이프의 소스가 되고, 입력을 "수신"하는 프로세스가 에서 출력을 읽는 것이 STDIN
파이프의 대상이 된다고 가정합니다. 파이프를 텍스트 파일이나 다른 파일에는 연결할 수 없으며 프로세스에만 연결할 수 있습니다.
둘째, 파이프를 사용할 경우 파이프 왼쪽의 프로세스는 를 사용하고 STDOUT
, 파이프의 오른쪽 프로세스는 을 사용한다 STDIN
. 그래서 당신이 시도하는 명령은 보내려고 할 것입니다산출my_program
파이프에서 읽는 대신 파이프 에 .
제공된 지침을 올바르게 제시하면 어쨌든 작동하지 않습니다. 지시문은 "...작업자가 입력 파일에서 테스트 사례를 가져옵니다"로 끝납니다. 프로그램이 파일로부터 입력을 받으면,아니요에서 읽고 STDIN
어쨌든 파이프의 데이터를 무시합니다.
파이프와 함께 작동하려면 메시지가 표시될 때 테스트 사례를 수동으로 입력해야 하는 것처럼 my_program
에서 읽도록 작성해야 합니다 . STDIN
그런 다음 명령줄을 다음과 같이 다시 작성할 수 있습니다.
cat text_cases.txt | jave my_program
cat
는프로세스텍스트 파일을 읽고 그 내용을 로 보낸 STDOUT
다음 my_program
수동으로 입력하는 대신 파이프를 사용하여 데이터를 "읽습니다". STDIN
Java가 파이프와 어떻게 인터페이스하는지 모르기 때문에 강사가 해당 방법을 사용하도록 요청했기 때문에 표준 방식으로 작동할 것이라는 가정을 기반으로 합니다.
IMHO, 리소스 사용량이 적기 때문에 리디렉션을 사용하는 것이 파이프보다 낫습니다.
java my_program < test_cases.txt
즉, 이 단계가 나중에 파이프를 사용해야 하는 프로세스의 더 큰 프로세스 체인에 포함되지 않는 한입니다.