I 3 개 프로세스 파이프 체인 더한 전류 프로그램되도록 만들려고하고 유닉스 체인의 지연 :파이프
1 - Exec에서 P1 및 P2
(3)의 입력 (P1)의 출력을 보내 - 표준 출력 P3에 표시 출력
5 - - P3
입력 전류/주/드라이버 프로그램의 패스 표준 입력I P3
(4)의 입력에 출력 P2 보내기 2 개의 파이프를 사용하고 있습니다. 작업 # 5의 경우 주 프로그램은 stdin에서 읽고 P3이 읽는 파이프에 씁니다.
저는 서로 통신하는 프로세스를 관리했습니다. 하지만 P1이 쓰고 P2가 STDIN에서이 쓰기를 감지하면 P2가 쓰기를 감지하고 처음에 많은 P1 쓰기를 놓치기 전에 P1이 수백 번 작성되었을 수 있다는 점에서 큰 지연이 있다는 것을 알게되었습니다. 나는 P2가 사실상 정각에 시작되었다는 인쇄 메시지를 통해 확인했다. 그러나 그것은 시간상의 입력을 감지하거나 읽지 않는다. (파이썬 스크립트 루핑 : "for sys.stdin :")
여기에 내 코드입니다 : 내가 발견
int pipe1[2];
int pipe2[2];
if (pipe(pipe1) < 0 || pipe(pipe2) < 0 )
{
perror("Error: pipe");
}
pid_t procIDC = fork();
if (procIDC == 0)
{
dup2(pipe2[0], 0);
execv("procC", argv);
}
else
{
pid_t procIDB ;
procIDB = fork();
if (procIDB == 0)
{
dup2(pipe1[0], 0);
dup2(pipe2[1], 1);
if (execl("/usr/bin/python", "/usr/bin/python", "./test.py", (char *)NULL) < 0)
{
perror("execl"); return 0;
}
}
else
{
pid_t procIDA = fork();
if (procIDA ==0)
{
dup2(pipe1[1], 1);
execv("proc1", argv);
}
else
{
dup2(pipe2[1], 1);
//print any input so it sends to p3
ssize_t read;
char *inputLine = NULL;
size_t len = 0;
while ((read = getline(&inputLine, &len, stdin)) != -1)
{
printf(inputLine);
}
}
}
실제로 시도했지만 도움이되지 않습니다. 또한 printf 및 플러시 후에 후속 인쇄 전에 잠자기 모드로 설정하면 궁극적으로 P2로 픽업됩니다. 그러나 대신 P2가 마지막으로 읽기를 감지하는 시간 간격 만 증가 시켰습니다. 이해가 안돼! – cppNoob
@cppNoob 당신은 우리에게 * 독서 * 프로그램을 보여줬을뿐입니다. * fooush를 * it *에 추가하는 것은 아무런 차이를 만들지 않을 것입니다 : 지연은 * writing * one에서 일어나고 있습니다. 그리고 * 물론 느린 프로그램에 잠을 자면 속도가 느려집니다. –
사실, fflush는 분명히 쓰기 프로그램에서 수행되고 있기 때문에 잠시 후 – cppNoob