2011-03-21 2 views
1

내 C++ 코드에서 셸의 파일 이름을 리다이렉션에서 가져 오는 방법은 무엇입니까? ./MyProgram < myfile, myfile을 파일 이름과 내용으로 줄 단위로 가져 오려고합니다.유닉스 파이프 처리 방법

** 편집 : 파일에서 입력을 가져올 수있었습니다. 도와 주셔서 감사합니다. 그러나 파일 내용을 반복 한 후에 사용자 입력을 cin으로 유지하려고합니다. 다음과 같습니다.

while (true) 
{ 
    if (cin.eof() == false) 
    { 
     getline(cin, line); 
     cout << line; 
    }else{ 
     cin >> choice; 
    } 
} 
+0

를 참조하십시오; 그것이 EOF의 의미입니다. 터미널에서 읽으려는 경우 I/O 리다이렉션을 지원하지 않으려 고합니다. –

+0

또한, 귀하의 질문은 본질적으로 파이프와 관련이 없습니다. 적절하게 그것을 retitle하십시오. –

+0

정말로 편집을 되돌려 야하고, 문제가 명확하다는 것을 명확히하고, 전혀 다른 것으로 문제를 바꾸는 것이 좋지 않습니다. 새로운 질문을 별도의 질문으로 말하면 좋겠지 만 이미 여러 번 답변을 받았습니다. 'while (cin.getline (line)) '을 사용하십시오. –

답변

8

(최소한 이식 할 수는 없습니다.) 이 정보는 프로그램에 제공되지 않습니다. 대신 표준 입력에서 읽음으로써 myfile (예에서)의 데이터에 액세스 할 수 있습니다. 예를 들어, C++의 getlinecin을 첫 번째 매개 변수로 사용할 수 있습니다.

+0

하지만 위의 명령에서 입력을 위해 수동으로 입력하지 않고 파일에서 읽어야합니다. . 전체 라인을 얻을 수있는 방법이 있습니까? – Amumu

+0

표준 입력을 읽음으로써'myfile'에서 데이터를 얻을 수 있습니다. 이것이 리디렉션 연산자의 핵심입니다. 이 프로그램을 사용하면 프로그램이 사용자가 입력 한 내용을 리디렉션 된 파일을 읽는 것과 같은 방식으로 읽을 수 있습니다. –

+0

좋아, 해냈어. 그러나 cin을 사용하여 파일을 읽은 후 사용자 입력을 유지하려고하는데 작동하지 않았습니다. 그것은 루핑을 영원히 유지합니다. 나는 첫 번째 게시물을 수정합니다. – Amumu

2

셸에 따라 실제 파일이나 파이프를 나타내는 설명자를 상속했을 수 있습니다. 실제 파이프 (예 : FIFO) 인 경우 이름이 의미하는 바가 크지 않습니다. 그러나 리눅스에서 이름을 얻을 수는 있습니다. (그리고 Windows에서, 그러나 당신이 그것에 관심이있는 것 같지 않습니다.) 표준 입력이 파일에서 리디렉션되는 경우

는 표준 입력에 EOF를 얻을 후 더 이상 읽을 입력이없는, Getting Filename from file descriptor in C