Russian Qt Forum
Ноябрь 14, 2024, 20:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Прошу помощи pipe (поименованный канал) Не работает в GUI  (Прочитано 3444 раз)
star62
Гость
« : Август 05, 2009, 07:45 »

Добрый день всем. Проблема такая. Хочу устроить обмен данными между двух приложений в Linux Fedora 11. Использую поименованные каналы.

Но вот незадача. В консоли все работает, а в ГУИ не хочет. Не пойму почему.

Дело обстоит так, в стандартном приложении с MainWindow на клик мыши вешается обработчик:
Код
C++ (Qt)
void MainWindowImpl::load(){
pFile = NULL;
int t = mkfifo(FIFO_NAME, 0600);
if(t != 0){
QMessageBox::information(this, "Error", "t = "+QString::number(t));
exit(1);
}
perror("mkfifo() error");
pFile = fopen(FIFO_NAME, "rb");
if (!pFile){
QMessageBox::information(this, "Error", "Not open file");
}
}
 

И происходит следующее...
mkfifo(FIFO_NAME, 0600); создает файл, t = 0;
perror("mkfifo() error"); пишет следующее "mkfifo() error: Ресурс временно недоступен" Вот тут главный вопрос, почему? Кто его блокирует?
и как следствие pFile = fopen(FIFO_NAME, "rb");  виснет и весь обработчик за ней


Если все тоже самое сделать в простом консольном приложении тогда perror("mkfifo() error"); пишет "mkfifo() error: Success" и все в порядке

Помоги, объясните в чем причина и как исправить?
P.S. Все делаю в QDevelop
Записан
ритт
Гость
« Ответ #1 : Август 05, 2009, 08:02 »

есть одна мыслишка, но пока воздержусь...

а почему не использовать QLocalSocket?
Записан
star62
Гость
« Ответ #2 : Август 05, 2009, 08:51 »


а почему не использовать QLocalSocket?

Честно, не знал, можно попробовать. Вот только тогда среда передачи ограничивается Qt, а так можно было бы и не Qt приложения цеплять. (Хотя может я и не прав, надо разобраться подробнее с сокетами)

И все таки хотелось бы услышать соображения по поводу изначальной проблемы Улыбающийся
Записан
star62
Гость
« Ответ #3 : Август 05, 2009, 18:11 »

Решил задачу через QLocalSocket и QLocalServer. Работает. Но для полного удовлетворения нехватает понимания функций
bool waitForConnected ( int msec = 30000 )
bool waitForDisconnected ( int msecs = 30000 )
virtual bool waitForReadyRead ( int msecs = 30000 )

Если не трудно объясните по русски их Улыбающийся Что делают, для чего и где необходимы.

Из прочитанного на англицком, порядка в голове не наступило. Понятно что они очень важны, но не более.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.137 секунд. Запросов: 20.