많은 하위 프로세스가있는 프로그램을 작성하고 있습니다. 부모는 자식에게 쓰는 파이프가 두 개 있으며, 각 파이프는 자식의 개별 파일 설명자로 dup2됩니다. 부모는 필요한 명령을 실행하는 스크립트 파일을 읽습니다. 이것은 부모에서 자식으로 파이프를 닫으려고하면 스크립트 파일의 다음 줄이 완전히 비어 있으면 이상하게 읽히는 경우를 제외하고는 잘 작동하는 것 같습니다. 만약 내가 그것을 인쇄하면 ���<
내 프로그램 (이해할 수있는)으로 무엇을 해야할지 모르겠다 나온다.파이프를 닫으면 파일에서 잘못된 라인을 읽을 수 있습니다 (파이프와 독립적입니다).
필자가 읽고있는 파일 포인터와 내가 닫고있는 파이프 사이에는 전혀 연관성이 없습니다.
라인 입력을위한 코드가 아래와 같습니다. 그것은 완벽하게 정상적으로 작동하지만,이 경우에는 제대로 작동하지 않아서 왜 작동하지 못합니다.
char *get_script_line(FILE *script)
{
char *line;
char charRead;
int placeInStr = 0;
int currentSizeOfStr = 80;
int maxStrLength = 64;
/* initialize the line */
line = (char *)malloc(sizeof(char)*currentSizeOfStr);
while ((charRead = fgetc(script)) != EOF && charRead != '\n') {
/* read each char from input and put it in the array */
line[placeInStr] = charRead;
placeInStr++;
if (placeInStr == currentSizeOfStr) {
/* array will run out of room, need to allocate */
/* some more space */
currentSizeOfStr = placeInStr + maxStrLength;
line = realloc(line, currentSizeOfStr);
}
}
if (charRead == EOF && placeInStr == 0)
{
/* EOF, return null */
return NULL;
}
return line;
}
그리고 나는이 일을하고있어 파이프를 닫을 때 :
fflush(pipe);
fclose(pipe);
사람이 내가 잘못 일을 할 수있는 것의 어떤 생각을 가지고 있습니까? 아니면이 문제를 디버깅하는 방법에 대한 아이디어를 가지고 있습니까?
Start a new child and set up pipes etc
Send EOF to one of the pipes to the child
(BLANK LINE)
Do something else
그것은 그렇지 않으면 잘 작동하고 내가 의지하고 있어요 나는이 파이프를 폐쇄하고있어 상당히 확신 :
편집 : 내 입력 스크립트 (기본적으로) 다음과 같이 보일 수도 명확하게하려면 EOF를 가정으로 보내십시오.
고마워요, 그냥 그것을보고 그것을 실행하고 잘못된 읽기/크기 n의 쓰기에 대한 오류가 힙니다. 나는이 나쁜 가정거야? 무슨 일이 일어나고 있는지 어떻게 해석할까요? 그리고 더 중요한 것은 어떻게 수정해야합니까? – Sam