리눅스에서 동기화 문제에 대한 도움을 찾고 있습니다. 나는 초보자이며, 세마포어를 사용하여 동기화하는 방법을 실제로 이해하지 못한다고 생각합니다. 내 임무는 파일에 액세스하는 두 프로세스를 동기화하는 것입니다. 하나는 다른 프로세스의 FIFO에서 읽은 다음이 파일에 쓰고 다른 하나는 읽습니다. 내 코드에는 동기화가 없다는 것을 알고 있지만 어떻게해야하는지 전혀 모른다.리눅스 세마포어
코드 :
sem_t writer, reader;
void readFromFifoSendToFile(void) {
sem_init(&writer, 1, 1);
FILE *fp;
char buffer[100];
FILE *file;
file = fopen("file", "w+");
fclose(file);
while(1) {
sem_wait(&writer);
fp = fopen("fifo", "r");
fscanf(fp, "%s", buffer);
fclose(fp);
file = fopen("file", "a+");
fputs(buffer, file);
fclose(file);
sem_post(&writer);
}
}
void readFromFileAndPrint(void) {
sem_init(&reader, 1, 1);
FILE *fp;
char buffer[100];
int counter = 0;
while(1) {
sem_wait(&reader);
counter++;
if(counter == 1) {
sem_wait(&writer);
sem_post(&reader);
fp = fopen("file", "r");
fscanf(fp, "%s", buffer);
fclose(fp);
printf("%s", buffer);
sem_wait(&reader);
if(counter == 0) {
sem_post(&writer);
}
sem_post(&reader);
}
}
세마포어를 사용해야합니까, 아니면 [named pipess] (http://www.linuxjournal.com/article/2156)를 사용할 수 있습니까? – Soren
학교 과제입니까? 동기화에 대한 강의가 빠졌습니까? 당신의 코스 문헌에 아무것도 없나요? 검색을 시도 했습니까 (수천 개의 예제와 튜토리얼이 그물 전체에 있습니다)? –
@Soren 세마포어를 사용하지 않아도되지만 파일을 사용해야합니다. 나는 대답을 찾고자했지만 그 개념을 얻지 못했습니다. 저는 Java 녀석입니다.이 Linux 특성을 사용하지 않았습니다. 예, 학교 과제입니다. – voidmat