2011-09-23 2 views
0

나는 높거나 낮게 조사했으나 오히려 간단한 질문이라고 생각되는 것에 대한 대답을 찾을 수 없습니다. 나는 오히려 C에 익숙하지 않다. 그리고이 프로젝트 동안 나에게 주어진 제한 때문에 나는 이것을하는 방법을 생각해 내는데 약간의 어려움을 겪고있다.명령 줄에서 '<'리디렉션 연산자를 사용하여 텍스트 파일을 읽는 데 약간의 문제가 있습니까? C

텍스트 파일에서 텍스트를 읽고 그 데이터를 배열에 저장하려고합니다. 충분히 간단합니다. 그러나 명령 줄 연산자 '<'을 사용하고 stdin을 텍스트 파일로 리디렉션하면됩니다. 내가 제대로 파일을 열고 후속 작업을 수행하는 방법을 알아낼 수

수있는 유일한 방법은 다음과 같다 :

#include <stdio.h> 


FILE *fr;   

main() 

{ 

    fr = fopen ("mytext.txt", "r"); /* open the file for reading */ 

그 문제는 내가 처음을 얻이 수없는 것이다 fopen()의 매개 변수는 stdin '<'이 제공 한 파일 이름이됩니다. 매개 변수에 문자열을 명시 적으로 입력하는 경우에만 작동합니다. 내가했다 예를 들어, 실행

myprog.o < mytxt.txt 

어떻게 내가하면 fopen 함수가 표준 입력 리디렉션에서 제공하는 텍스트 파일의 이름을 전달 수 있을까? 아니면 내가하려고하는 일을하는 다른/더 좋은 방법이 있습니까?

미리 감사드립니다.

+1

그건 ... 표준입니다. stdin에서 읽었습니다. –

답변

5

파일을 직접 열지 말고 stdin에서 읽어야합니다. (데모의 목적의이 fopen이 사용됩니다 가정 해 봅시다)

  1. 파일을 열 : 조금 이런 식으로 생각 -

    이는 재 작동하는 방법이다.

  2. 기존 stdin이 (가) 닫힙니다. 더 이상 터미널이나 유사한 구조를 의미하지 않습니다.
  3. stdin은 1 단계에서 열린 파일로 대체됩니다.
  4. stdin에서의 모든 읽기는 이제 입력 파일에서 직접 작동합니다.

입력 리디렉션을 사용하면 사용자가 파일을 리디렉션하거나 프로그램에 직접 콘텐츠를 입력하도록 허용 할 수 있습니다.

실제 문제는 프로그램의 인수로 파일 이름을 전달하는 것이 좋습니다. 당신과 같이 프로그램을 argv을 사용하고 부를 것이다 :

myprog.o mytxt.txt 

를이 경우, argv[1]mytxt.txt 될 것입니다.

3

FILE*<stdio.h> 내에 선언 된 핸들이 실행 프로세스의 표준 입력을 가리 킵니다. 이러한 파일 핸들은 stdin입니다.

3

C 프로그램은 쉘에서 처리하기 때문에 리다이렉션을 인식하지 못합니다. C 프로그램은 argc을보고 arg가 없으면 stdin에서 읽거나 그렇지 않으면 주어진 파일에서 읽어야합니다.

+0

이것은 실제 컨벤션에 관한 것이 아닙니다. 그것은 숙제를 요구하는 것에 관한 것입니다. –

0

이 프로그램에서 수행해야하는 모든 작업이 표준 입력에서 읽히는 경우 파일을 열 필요가 없습니다. OS 및 C 라이브러리는 파일 열기 및 닫기를 처리합니다. 당신이 파일에는 개폐를 볼 수 있듯이

시도,

#include <stdio.h> 

int main(int argc, char ** argv) { 
    int ch = getchar(); 
    while (ch != EOF) { 
     putchar(ch); 
     ch = getchar(); 
    } 
} 

같은 간단한을 그래서 표준 입력에서 파일을 읽을 수있는, 다시 그것을 밖으로 물품. putchargetchar 상대적으로 stdin 및 stdout에 씁니다.

더 명확하게 나타내려면 미리 정의 된 파일 핸들을 사용할 수 있습니다.

int ch = fgetc(stdin); 
while (ch != EOF) { 
    fputc(ch, stdout); 
    ch = fgetc(stdin); 
} 

당신은 printf()fprintf(), scanf()fscanf(), 다른 모든 훌륭한 표준 입출력 기능을 보일 것입니다.

관련 문제