2014-03-04 12 views
1

프로그래밍에서 배웠던 것처럼, 내 프로그램에 입력 리다이렉션을 추가하고 싶을 때 실행했을 때 내 프로그램을 쓰고 사용자의 입력을 기다린다. (std :: cin 또는 이와 비슷한 것). 하지만 나는 덜 명령에 의해 혼란스러워.'less'명령의 입력을 리디렉션 할 수있는 이유는 무엇입니까?하지만 인수없이 실행할 수있는 이유는 무엇입니까?

우리 모두는 우리가 이런 식으로 뭔가를 할 수 있다는 사실을 알고 :

ls -la | less 

을하지만 우리는 인수없이

less 

을 실행하려고 할 때 우리는 오류가 발생합니다. 어째서?!

+0

man 3 isatty를 참조하십시오, 나는 _UNIX & Linux_에이에 대한 자세한 질문 118156/how-can-we-distingu- that-input-to-our-program-is-direct-of-use-use) – Shnd

답변

3

less은 표준 입력 또는 파일로부터 입력을 받아들입니다.

터미널에서 동일한 입력을 다시 표시하는 것만으로는 입력을 받아들이지 않는 것이므로 less 프로그램은 stdin이 터미널 (isatty)인지 확인하고 실행을 거부합니다. [. 어떻게 isatty 기능 간단한 작동] 가 (http://unix.stackexchange.com/questions/ :

완전성을 위해

+0

그게 내가 찾고 있던 대답이었다 : D 감사합니다. Dietrich Epp – Shnd

+0

btw는'isatty'에 대한 더 많은 문서를 줄 수 있습니까? 어떤 종류의 자습서, 어떻게 포인터 나이 함수에 입력 스트림의 일부를 전달할 수 있습니까? – Shnd

+1

@ Shnd : stdin에 0을 전달하면됩니다. –

2

Less는 한 번에 한 화면 씩 출력을 표시하는 프로그램의 UNIX 용어 인 호출기입니다. 프로그램의 출력을 less로 파이프하면 출력을 한 번에 한 페이지 씩 보여줍니다. 명령 줄에서 파일 이름을 전달하면 해당 파일이 페이지별로 표시됩니다.

둘 다 수행하지 않으면 페이지를 이동할 필요가 없습니다. 의미있는 일이 없기 때문에 오류가 발생합니다. 너는 무엇을 보여주고 싶니?

+0

내 프로그램에서 이것을 구현하도록 안내 할 수 있습니까? 나는 사용자 입력 (예 : cin ::)을 기다리지 않고 리디렉션 된 입력을 얻는 방법을 알고 있습니까? – Shnd

+1

그 말은 (a) 파이프 나 파일에서 stdin으로 리디렉션 된 인수가없는 상태에서 (a) 실행되지 않고 (b) 키보드에서 stdin이 오는 인수없이 실행되는 것을 '덜'구분하는 방법을 설명하지 않습니다. –