Я ищу помощь по синхронизации в Linux. Я новичок, и я думаю, что я действительно не понимаю, как использовать семафоры для синхронизации. Моя задача - синхронизировать два процесса, которые обращаются к файлу - один читает из fifo из другого процесса, записывает в этот файл, затем читает другой. Я знаю, что в моем коде не хватает синхронизации, но я не знаю, как это сделать.Семафоры Linux
Код:
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