21.05.2019, 17:09 [+3 UTC]
в нашей команде: 3 631 чел. | участники онлайн: 14 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.75 (18.05.2019)
JS-v.1.33 | CSS-v.3.35

Общие новости:
28.04.2019, 09:13

Форум:
16.05.2019, 21:07

Последний вопрос:
21.05.2019, 16:42
Всего: 149665

Последний ответ:
21.05.2019, 17:08
Всего: 258499

Последняя рассылка:
21.05.2019, 16:15

Писем в очереди:
2

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
08.04.2016, 15:31 »
anton74551
Cпасибо огромное за помощь! [вопрос № 189072, ответ № 273603]
18.07.2012, 18:16 »
Посетитель - 394198
Спасибо за помощь. [вопрос № 186447, ответ № 271346]
27.09.2018, 15:22 »
Анатолий
Поражён своей неудачей в гугле.Спасибо. [вопрос № 193604, ответ № 276714]
Наши встречи:
ID: 830
ID: 823

РАЗДЕЛ • С / С++

Создание программ на языках C и C++.

[администратор рассылки: Андрей Кузнецов aka Dr_Andrew (Старший модератор)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 608
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 277
solowey
Статус: Практикант
Рейтинг: 229

Перейти к консультации №:
 

Консультация онлайн # 68438
Раздел: • С / С++
Автор вопроса: Дмитриев Денис Юрьевич
Отправлена: 24.12.2006, 22:34
Поступило ответов: 2

Добрых суток всем!

Дали мне задание сделать под Линуксом что-то типа чата, использую разделяемую память. Т.е. открываем две консоли, в каждой из них запускаем прогу. Теперь сообщения отправленные из первой должна вывести на экран вторая программа. И соответственно наоборот. Проблема одна. Как одноврмененно ждать от пользователя ввода текста и проверять не пришло ли сообщение от другой программы? Или же это не возможно?

Состояние: Консультация закрыта

Ответ # 133413 от Torsten

Здравствуйте, Дмитриев Денис Юрьевич!
В программировании возможно все, кроме ИИ.

Реализовать можно несколько способами.
1) использовать неблокируемый ввод/вывод
2) использовать потоки

В первом случае через fcntl устанавливаем принимающему сокету и файловым дескрепторам ввода/вывода флаг O_NONBLOCK. В цикле проверяем состояния ввода (ввел ли что-нибудь пользователь или нет), а так же слушаем не пришло ли нам что-нибудь на сокет. Это достаточно сложно кодить нужно много, ну вообще не удобно.

Второй способ - с помощью потоков. Создается дополнительный поток для прослушки или ввода данных. Один поток слушает с помощью select не пришло ли что-нибудь, ну и выводит это дело. А второй обрабатывает ввод данных.

Все это побродно описано у Стивенса - unix:разработка сетевых приложений. Там и исходные коды есть и комментарии и куча другой полезной информации.


Консультировал: Torsten
Дата отправки: 24.12.2006, 23:02

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 133439 от Ramok

Здравствуйте, Дмитриев Денис Юрьевич!

для этого испольщуется системный вызов select().
Есть множество примеров использования оного


Консультировал: Ramok
Дата отправки: 25.12.2006, 03:32

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.36161 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.75 от 18.05.2019
Версия JS: 1.33 | Версия CSS: 3.35