2016-10-11 2 views
1

두 개의 독립적 인 프로세스 (포크 없음)간에 데이터를 공유하려면 어떻게해야합니까? 마지막으로C에서 두 개의 독립 프로세스 간 데이터 공유

process1: 

"Hello" has been entered. 

시스템 QNX/POSIX입니다

process1: 

Server(PID-399341): Waiting for input.... 

다음

process2: 

Enter server process: 

399341 

Enter a string: 

Hello 

다른 터미널

에서 : 내가 뭘 원하는 기본적으로이 같은 것입니다. 이 작업을 수행 할 수있는 옵션은 무엇입니까?

감사합니다.

+1

TCP/IP? 또는 파일에 쓰시겠습니까? –

+0

공유 메모리 세그먼트? –

+0

FIFO? 메시지 큐? 맞춤 장치? 위키? 다른 HTTP 서비스? 스 니커 넷? –

답변

1

명명 된 파이프 (FIFO)를 사용하면 쉽게 구현할 수 있습니다. PID와 동일한 FIFO 이름을 선택하기 만하면됩니다. 다음은 서버 및 클라이언트에 대한 작동 코드입니다.

server.c

int fd; 
    char wrbuf[50], buf[10]; 

    printf("Enter server process: "); 
    scanf("%s",buf); 
    getchar(); 

    fd = open(buf,O_WRONLY); 

    printf("Enter message\n"); 

    gets(wrbuf); 

    write(fd, wrbuf, strlen(wrbuf)+1); 

내가 PID와 같은 키 값을함으로써 메시지 큐 및 공유 MEM 세그먼트와 함께 할 수 같은 생각

int fd; 
    char buf[10], rdbuf[50]; 

    sprintf(buf,"%d",getpid()); 

    if(mkfifo(buf,0660) == -1) 
      perror("mkfifo"); 

    printf("Server(PID-%d): Waiting for input..\n",getpid()); 

    fd = open(buf,O_RDONLY); 

    read(fd, rdbuf, 50); 

    printf("%s has been entered\n",rdbuf); 

    close(fd); 

    return 0; 

client.c. 그러나 나는 확실하지 않다.

+0

안녕하세요, 감사합니다. 간단한 예제를 보는 것이 좋습니다. 그러면 서버가 버퍼가 변경되었음을 어떻게 알 수 있습니까? 나는 클라이언트가 서버 메시지를 계속 먹이는 무한 while 루프에서 이것을 사용할 계획이다. – Senri

+0

이 예제에서는 서버가 항상 50자를 읽습니다. 거기에 null 문자가있는 경우 printf는 그만큼만 인쇄합니다. 따라서 버퍼는 항상 서버에 의해 지워지고 다른 메시지를 기다립니다. 이것은 OS에서 처리됩니다. 안전한쪽에 있으려면 모든 null 문자를 쓰기 전에 버퍼에 넣으십시오. –

관련 문제