2014-10-01 7 views
0

그래서 나는 다음과 같은 명령을 수행하여 텍스트 파일 동의를 의미 해요 : 나는 목록 텍스트 파일 내 종류의 프로그램에 입력되고 있음을 이해리디렉션 된 표준 입력 - C

$ sort < list.txt 

을하지만, 실제로 어떻게 내가 할 내 프로그램 내에서 정보를 사용합니까? 어떻게 읽습니까?

내 코드 :

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char** argv) { 

    char c; 

    while (c != EOF){ 
     c = getchar(); 
     printf("%c ",c); 
    } 

    return (0); 
} 

예 : 당신은 당신이 게시물에 기록 된 것처럼 명령 줄에서 '<'기호를 사용하는 경우

$ ./sort.c < input.txt 

./sort.c: line 3: $'\r': command not found 

./sort.c: line 4: syntax error near unexpected token `(' 

'/sort.c: line 4: `int main(int argc, char** argv) { 
+2

'사용법 #include '와 stdin''에서 읽습니다. –

+2

리디렉션은 프로그램 외부에서 발생하는 것입니다. 쉘은 프로그램이 시작되기 전에'list.txt' 파일 *을 열어서 프로그램의 표준 입력에 연결합니다. 귀하의 프로그램은 그것에 대해 아무 것도 할 필요가 없습니다. 감히 'isatty (STDIN_FILENO)'가 감히 0 일 때만 리턴한다는 것을 알 수 있습니다. – 5gon12eder

+0

@ 5gon12eder 오, 당신이 그것을 못 박았을 것입니다. 나의 코멘트는 * how *; 귀하의 의견은 * 왜 * 설명하고, 따라서 더 교육적입니다. 그것은 단지 나에게 발생하지 않았다. 나는 리디렉션이 너무 오랫동안 작동하는 방법을 알고 있었고, 물을 알아 채지 못하는 물고기와 같다. :) –

답변

2

는 OS가 당신을 위해 파일을 읽고 stdin을 통해 프로그램에 내용을 제공합니다. 그래서, 당신이해야 할 일은 stdin에서 읽는 것입니다.

여기 아주 간단한 코드 입증하는 것입니다 -

#include <stdio.h> 

int main() { 
    char line[256]; 
    FILE *fp = stdin; 
    while(fgets(line, sizeof(line), fp) != NULL) { 
     printf("%s", line); 
    } 
} 
관련 문제