Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2010, 00:03   #1
IceBreaker
Пользователь
 
Аватар для IceBreaker
 
Регистрация: 03.02.2010
Сообщений: 20
По умолчанию mkfifo, некорректная работа (Линукс)

Задача засунуть в фифо "aaa" и высунуть оттуда в buf, и высунутое распечатать.
Код:
int main(){
	char buf[1024];
	int fd, fd1;
	umask(0);
	mkfifo("fifo", 0666);  // 0 перед целочисленной константой переводит систему из десятичной в восьмиричную.
	perror("1");
	fd = open("fifo", O_RDWR);
	perror("2");
	write(fd, "aaa", 4);
	perror("3");
	close(fd);
	perror("4");
	fd = open("fifo", O_RDONLY);
	perror("5");
	read(fd, buf, 4);
	perror("6");
	close(fd);
	printf("%s\n", buf);
	unlink("fifo");
	return 0;
Все стабильно работает нормально, до строчки:
Код:
	fd = open("fifo", O_RDONLY);
Тут виснет.
Если фифо уже создан, то работает корректно. В чем ошибка.

Ну то есть суть вопроса вот в чем: Почему два процесса, которые обмениваются информацией, должны существовать в системе одновременно, чтобы прога работала корректно.
Shit happens

Последний раз редактировалось Stilet; 16.02.2010 в 08:39.
IceBreaker вне форума Ответить с цитированием
Старый 16.02.2010, 08:43   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не знаю кому как а мне функции эти ни о чем не говорят...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.02.2010, 10:30   #3
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

что такое fifo у вас? Oo Похоже на какой-то неправильный код под линуксом
подпись
liljon вне форума Ответить с цитированием
Старый 16.02.2010, 22:31   #4
IceBreaker
Пользователь
 
Аватар для IceBreaker
 
Регистрация: 03.02.2010
Сообщений: 20
По умолчанию

Почему же неправильный)) Нормальный код, да он под линуксом. Fifo - это имя файла. а mkfifo - это создание именнованой трубы.
Shit happens
IceBreaker вне форума Ответить с цитированием
Старый 21.03.2012, 13:34   #5
sergtche
Новичок
Джуниор
 
Регистрация: 21.03.2012
Сообщений: 1
По умолчанию

При открытии 1-ый раз заменить
fd = open("fifo", O_RDWR);
заменить
fd = open("fifo", O_WRONLY);
sergtche вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Малюсенький линукс. jojahti Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 8 22.10.2009 11:00
Касперский по линукс??? jojahti Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 21 18.10.2009 16:22
Некорректная работа потока 3D Hunter Общие вопросы Delphi 7 09.03.2009 10:51
Некорректная печать Natalie Microsoft Office Word 5 29.08.2008 11:08
BDE и DataBase Desktop - некорректная работа в Vista Dux БД в Delphi 9 03.04.2008 23:18