21.02.2019, 14:15 [+3 UTC]
в нашей команде: 3 400 чел. | участники онлайн: 10 (рекорд: 21)

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

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

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

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

Общие новости:
10.02.2019, 21:59

Форум:
16.02.2019, 15:03

Последний вопрос:
21.02.2019, 14:11
Всего: 148799

Последний ответ:
21.02.2019, 09:18
Всего: 257813

Последняя рассылка:
20.02.2019, 21:15

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

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

Наша кнопка:

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

Отзывы о нас:
17.02.2010, 13:19 »
kapezc
Очень хорошо расписано и понятно. [вопрос № 176720, ответ № 259506]
03.02.2019, 15:34 »
dar777
Решение просто отличное! [вопрос № 194544, ответ № 277375]
Наши встречи:
ID: 857

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

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

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

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

Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 790
solowey
Статус: Студент
Рейтинг: 334
zdwork
Статус: 1-й класс
Рейтинг: 111

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

Консультация онлайн # 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.15331 сек.

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