Скачиваний:
6
Добавлен:
08.08.2022
Размер:
1.28 Кб
Скачать
#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
Соседние файлы в папке Lab7_Oreshchenko
  • #
    08.08.202265 б5compiler
  • #
    08.08.202269 б5compiler2
  • #
    08.08.202218.16 Кб4main
  • #
    08.08.20221.28 Кб6main.cpp
  • #
    08.08.20225.32 Кб4main.o
  • #
    08.08.202218.01 Кб4main2
  • #
    08.08.2022854 б6main2.cpp
  • #
    08.08.20224.5 Кб4main2.o