2013-03-23 5 views
0

여기에 의 내용을 읽으려고합니다. fileDesc 텍스트 파일을 가리키는 파일 설명자입니다. * pipe_d [1] * 한 번에 하나의 문자 . 이 파일에서 문자를 올바르게 인쇄 할 수 있지만 내 쓰기() 내가이 같은 경우 문자 및 파이프 문자의 메모리 주소를 쓰려고 시도합니다 믿습니다.파이프에 파일 설명자가있는 텍스트 파일을 읽습니다.

char x; 
FILE *file; 
file = fdopen(fileDesc, "a+"); 

while((x = fgetc(file)) != EOF) 
{ 
    printf("%c", x); 

    write(pipe_d[1], &x, sizeof(x)); 
} 

내가 대신 파이프에 기록 할 & X에있는 문자를 좀하고 싶습니다. 이견있는 사람?

미리 감사드립니다. X에 문제가 있습니다

+0

fdopen() + fgetc(), fgets(), fread()} BTW : O_RDWR과 O_APPEND의 조합은 의심스러워 보입니다. 그리고 당신의 fd는 어떤 종류의 파이프가 아니라 일반 파일을 가리 킵니다. – wildplasser

+0

나는 당신이 여기서 무엇을하려고하는지 잘 모르겠습니다. fd는 열려있는 파일에 대한 세부 정보가 들어있는 테이블의 인덱스입니다. 파이프를 다른 프로세스에 전달하면 동일한 메모리 공간을 공유하지 않는 한 해당 프로세스에 액세스 할 수 없습니다. (파이프의 양쪽 끝이 같은 프로세스에 있습니다.) –

+0

나는 그들이 파일에서 모든 데이터를 수동으로'읽는 '것이 아니라 파이프에 다시 데이터를 쓰는'쓰기 '작업없이, 그들이 열고있는 파일의 모든 데이터를 자동으로 가져 와서 파이프로 전달합니다. – Xymostech

답변

0
  1. :

    while((x = fgetc(file)) != EOF) 
    

    항상 영원히 프로그램 실행을 true로 평가합니다 : 그것은 샤아는, 그렇게 라인을 값 EOF, 를 포함 할 수 없습니다. x를 int으로 선언하면 문제를 해결할 수 있습니다.

  2. char-by-char 단위로 작업하려면, fdopen(pipe_d[1], "w")을 사용하고 fputc(fp, x)을 사용하여 파이프를 작성해야합니다.

  3. 현재이 글을 쓸 때 pipe(pipe_d)에 대한 호출이 없습니다. 하나 발행 했니?

  4. fork()에 대한 호출이 없으므로 파이프 판독기가 있습니까? 그렇지 않은 경우 파이프가 채워진 후 프로그램이 차단됩니다.

관련 문제