Добавил:
nickolai_oreschenko
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:УТС 4 семестр / Lab7_Oreshchenko / main
.cpp#include <pthread.h>
#include <iostream>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <signal.h>
bool bOpen = true;
bool bWriter = true;
pthread_t thread_writer; // идентификатор потока записи
int fd; // дескриптор
// Функция обработки ошибок
void sig_handler(int signo)
{
perror("get SIGPIPE");
}
// Функция записи
void* write_fifo(void* arg)
{
signal(SIGPIPE, sig_handler);
char buffer[8] = "MESSAGE";
while(bWriter) {
write(fd, buffer, 7);
sleep(1);
}
pthread_exit(NULL);
}// write_fifo
void* open_fifo(void* arg)
{
while(bOpen){
fd = open("/tmp/FIFO", O_WRONLY|O_NONBLOCK);
if(fd == -1){
std::cout << "Невозможно открыть файл" << std::endl;
sleep(1);
} else {
std::cout << "запись FIFO" << std::endl;
pthread_create(&thread_writer, NULL, &write_fifo, NULL);
pthread_exit(NULL);
}
}
pthread_exit(NULL);
}// open_fifo
int main()
{
mkfifo("/tmp/FIFO", 0644);
pthread_t thread_open;
pthread_create(&thread_open, NULL, &open_fifo, NULL);
getchar();
bOpen = bWriter = false;
pthread_join(thread_open, NULL);
pthread_join(thread_writer, NULL);
close(fd);
unlink("/tmp/FIFO");
return 0;
}// main