#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define LINEWIDTH 128
int main(int argc, char *argv[])
{
int nread;
char buf[LINEWIDTH];
int fds[2][2];
int pid[2];
int i, j, err;
long x, sum = 0;
for (i = 0; i < 2; i++) {
if ((err = pipe(fds[i])) < 0)
exit(1);
pid[i] = fork();
if (pid[i] == 0) {
close(fds[i][1]);
j = i;
goto children;
}
}
for(i = 0; i < 2; i++)
close(fds[i][0]);
while(1) {
memset(buf, 0, 128);
if ((nread = read(STDIN_FILENO, &buf, LINEWIDTH)) > 0) {
if(nread < 2)
continue;
if(buf[0] == '-'){
close(fds[i][1]);
exit(0);
}
errno = 0;
long x = strtol(buf, NULL, 10);
if (errno)
continue;
write(fds[x%2][1], &x, sizeof(long));
} else {
for(i=0; i<2; i++)
close(fds[i][1]);
}
}
exit(0);
children:
while(1){
if((nread = read(fds[j][0], &x, sizeof(long))) == sizeof(long)){
sum += x;
} else {
printf("sum of %s integers: %ld ", j ? "odd": "even", sum); exit(0);
}
}
}
해석은 질문자의 몫으로 남겨둠
게이야 이건 검색 걸리게 스샷말고 본문 복붙해야 효과적임
이미 본문은 날아가고, 이 스샷 밖에 안 남아있더라고
이걸 해주다니
아니 근데 코드가 ㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
아까 제대로 안 봤다가 지금 다시 봤는데 골드버그 장치를 만들어 놨구나 ㅋㅋㅋ
답변한 게이 ㄹㅇ 참게이다 fork 를 통한 작업 분할, pipe 를 통한 IPC까지 리눅스 개발 필수요소들을 꼭꼭 넣어서 집약시킨 예술 코드를 올려놨네