2014-06-21 2 views
0

C, Linux에서 세마포어와 공유 메모리로 문제가되는 두 개의 생성자와 하나의 문서를 해결해야합니다. 세 가지 프로세스가 있습니다. 첫 번째 프로세스는 프로듀서이고 두 번째 프로세스는 프로듀서이며 세 번째 프로세스는 consument입니다.두 프로세스가 공유 메모리에 쓰기

제작자가 자신의 파일을 읽고 하나의 버퍼에 씁니다. consument는 버퍼에서 읽고 stdout에 써야합니다.

제 문제는 두 번째 제작자가 적절한 위치에 버퍼링하는 방법입니까? 어쩌면 몇 가지 코드를 보여 첫 프로듀서 :

while(fgets(line, sizeof(line),fp)){ 

    wait(semid,0); 

for(i=0;i<1000 && line[i]!='\0';i++){ 
     buf[i]=line[i]; 
    } 
signal(semid,1); 


} 

fclose (fp); // close file 


signal(semid,1); 

두 번째 프로듀서 (세마포어 제외)이 동일합니다 ... 어떻게 (첫 생산 후) 적절한 위치에 버퍼에 작성하는 방법을 ...

소비자 :

while(1){ 
    wait(semid,2); 
    printf("\n Proces K: "); 
    for (i=0; i<1000 && buf[i]!='\n'; i++){ 
     printf("%c", buf[i]); 
    } 



    signal(semid,0); 
+0

세마포어로 균등하게 보호 된 다음 주소를 버퍼 내부에 저장하십시오. –

+0

무엇을 의미합니까? 이 솔루션을 이해할 수 없습니다. – xorgx3

+0

[i]도 공유해야합니다. 단지 buf가 아닙니다. – user3344003

답변

0

저는 구조체를 공유 메모리로 사용합니다. 여기에는 배열과 카운터가 있습니다.

제가 생각하기에는이 문제를 해결하는 가장 좋은 방법입니다. 이제는 내 프로그램이 잘 작동합니다. 의견을 주셔서 감사합니다.

관련 문제