Linux pipe를 통한 프로세스간 통신
글쓴이: develop / 작성시간: 금, 2020/04/03 - 5:04오후
c언어로 작성했습니다.
int main(int argc, char* argv[]){
// 부모 프로세스에서 결과값 넣기
close(fd[0]);
memset(buf, 0X00, 255); // buf는 char형이고 초기화 하는 작업임
sprintf(buf, "%s", argv);
write(fd[1], buf, strlen(buf)); // fd[1]은 pipe입니다. 쓰기용
// 자식 프로세스에서 결과값 받아오기
close(fd[1]);
memset(buf, 0X00, 255);
n = read(fd[0], buf , 255);
printf("%s\n", buf);
}
위 코드는 동작하는 코드만 넣은 것입니다.
근데, 동작을 안합니다. 왜? 일까요??
어떻게 해야
1, 부모에서 자식에게 값을 제대로 넘겨줄까? ( argv 매개변수 받은걸(숫자로 이루어진 매개변수))
2, 자식이 어떻게 PIPE를 통해 값을 제대로 가져올까??
3, 자식이 가져와서 INT형으로 어떻게 변환할까?
아무리 고민해도 모르겠어요ㅠㅠㅠ
(현재 공부중입니다. 다른 방법은 안되요, PIPE만 써서 하려고 해요 ㅠㅠ)
Forums:
https://www.geeksforgeeks.org
https://www.geeksforgeeks.org/c-program-demonstrate-fork-and-pipe/
감사합니다.
답변 감사합니다.
보내주신 페이지를 보니 뭔가 풀 수 있을거 같기도 하네요 해보겠습니다.!!!
근데, 해보니까 ㅠㅠ 잘안되긴 한데 혹시
근데, 해보니까 ㅠㅠ 잘안되긴 한데 혹시
pipe에 int값 넣는 법을 아시나요 ? 잘 안되네요 ㅠㅠ
답변을 하는 사람 입장도 조금은 생각을 해주셔서...
답변을 하는 사람 입장도 조금은 생각을 해주셔서...
최소한 답변하는 사람이 바로 실행해볼 수 있는 수준의 코드를 올려주시고 (code 태그를 써서), "동작을 안합니다"라고 쓰지 마시고 "이러이러한 입력을 넣으면 이러이러한 출력이 나와야 하는데 실제로는 이러이러하게 됩니다"라는 정도의 정보는 적어주세요... 지금 상태로는 컴파일이 안 된다는 말인지 먹통이 된다는 말인지 죽는다는 말인지 엉뚱한 값이 나온다는 말인지도 알 수가 없으니 그저 윗분처럼 pipe 예제 코드를 보세요라는 답밖에 할 수 없을 듯 합니다.
3번 질문 정도는 지금 상태로도 대답이 가능하겠네요.
1) 문자열로 들어온 숫자를 그대로 파이프로 보내고, 받은 쪽에서는 문자열을 받아서 atoi로 정수로 변환한다.
2) 문자열로 들어온 숫자를 atoi로 정수로 변환한 후, int 변수의 내용 4바이트 분량을 write로 보내고 받는 쪽에서도 int 변수의 주소를 read의 인자로 주어 받는다.
3) 기타 참신한 방법을 쓴다(?)
좋은 하루 되세요!
답변감사드립니다.
답변감사드립니다.
생각해보니 질문이 뭔내용인지 알기 힘들게 되어있네요!!
다음에는 확실히 질문 내용을 알게 올리겠습니다. !!
댓글 달기