powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / signal in not posix
12 сообщений из 12, страница 1 из 1
signal in not posix
    #39243474
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня есть такой код
Код: plaintext
1.
signal(SIGPIPE, SIG_IGN);

вопрос: как это будет работать в других ос, на винде например? нужно ли как-то его переписать, чтобы исходники были для разных платформ?
...
Рейтинг: 0 / 0
signal in not posix
    #39243483
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_blackкак это будет работать в других ос, на винде например?
Смотря чем компилировать будешь и с какими библиотеками.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
signal in not posix
    #39243487
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

ну, вот у меня проект в cmake, то есть компилировать можно, в теории, чем угодно.. использую буст.

получается, что когда закрывается соединение, возникает ошибка и программа рухает (неблокирующий сервер). но закрытие соединения - это нормально, поэтому инор. можно это как-нибудь сделать, чтобы "везде" работало?
...
Рейтинг: 0 / 0
signal in not posix
    #39243575
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_blackDimitry Sibiryakov,

ну, вот у меня проект в cmake, то есть компилировать можно, в теории, чем угодно.. использую буст.

получается, что когда закрывается соединение, возникает ошибка и программа рухает (неблокирующий сервер). но закрытие соединения - это нормально, поэтому инор. можно это как-нибудь сделать, чтобы "везде" работало?Во первых, cmake и boost тут совершенно ни при чем. Ты путаешь конвертер сценариев и библиотеку с операционной системой.

signal() это функция обращающаяся к сущности которая существует в *nix системах. Там есть такая специальная штука "сигналы" и пользовательская программа может с ними работать.
В Windows сигналов нет - вообще нет. Те задачи, которые решают "сигналы" в *nix, в Windows решаются другими методами.
Если ты скомпилируешь свою программу в виндах со специальной библиотекой которая содержит в себе функции превращающие различные signal() в вызовы подходящих WinAPI функций - то твоя программа сможет работать и в винде.
В готовом виде эти "специальные библиотеки" существуют. Самая известная это CygWin. Можно еще использовать msys для MinGW.
...
Рейтинг: 0 / 0
signal in not posix
    #39243577
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlВ Windows сигналов нет - вообще нет. Те задачи, которые решают "сигналы" в *nix, в Windows решаются другими методами.
Если ты скомпилируешь свою программу в виндах со специальной библиотекой которая содержит в себе функции превращающие различные signal() в вызовы подходящих WinAPI функций - то твоя программа сможет работать и в винде.
В готовом виде эти "специальные библиотеки" существуют. Самая известная это CygWin. Можно еще использовать msys для MinGW.

MSVC CRT также эмулирует некоторые из сигналов, но не все.
...
Рейтинг: 0 / 0
signal in not posix
    #39243929
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

нет, ничего я не путаю. про cmake сказал, чтобы было понятно, что в теории, такой проект можно собрать где угодно, сейчас это единственное место, которое мешает. остальная часть не использует платформозависимые решения, а использует библиотеки.

если в винде нет сигналов, то может тупо сделать эту строчку только для posix систем? что будет в винде если попытатся записать в канал ,который уже закрылся (с другой сторны)?
...
Рейтинг: 0 / 0
signal in not posix
    #39244054
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сильно сомневаюсь что SIGPIPE или его аналог есть под виндой.
Поэтому signal(SIGPIPE, SIG_IGN) - будет работать отлично, как и задумывалось: SIGPIPE не будет вызываться ))

SIGPIPE изначально предназначен для обработки завершения программ идущих в конвейере с данной.
Типа:
Код: plaintext
1.
zcat bigfile.gz | head -1


head завершается после чтения первой строки его входа, а zcat получает SIGPIPE чтобы понимать что дальше нет смысла выполняться.

Если же программа интерактивная или долгоиграющий сервер, то SIGPIPE надо игнорить, и обрабатывать ошибки I/O согласно логике работы программы.

Касательно остальных сигналов, то те которые актуальны под Виндой (INT, TERM ), вполне работают через вызов signal(), который в виндовых компиляторах, как минимум в VS (насколько я помню) должен присутствовать.
...
Рейтинг: 0 / 0
signal in not posix
    #39244267
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_blackWhite Owl,

нет, ничего я не путаю. про cmake сказал, чтобы было понятно, что в теории, такой проект можно собрать где угодно, сейчас это единственное место, которое мешает. остальная часть не использует платформозависимые решения, а использует библиотеки.То есть для тебя мерилом "собрать где угодно" выступает использование cmake? Ну-ну...


alexy_blackесли в винде нет сигналов, то может тупо сделать эту строчку только для posix систем? что будет в винде если попытатся записать в канал ,который уже закрылся (с другой сторны)?Что будет? WriteFile() упадет с соответствующей ошибкой.
...
Рейтинг: 0 / 0
signal in not posix
    #39244321
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlТо есть для тебя мерилом "собрать где угодно" выступает использование cmake? Ну-ну...ты прикалываешься?

так выходит этот участок нормально собирется и в vs?
...
Рейтинг: 0 / 0
signal in not posix
    #39244332
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_blackWhite OwlТо есть для тебя мерилом "собрать где угодно" выступает использование cmake? Ну-ну...ты прикалываешься?Нет, я грущу.
CMake в чем-то очень полезная утилита, но судить по ее использованию какой вид продукта ты пишешь совершенно нельзя. Ты можешь использовать CMake для описания сценария программы которая ни в коем случае не кроссплатформенная. Более того, многие люди не осилившие написание makefile берут CMake как более простую замену.

Я еще могу понять как человек может ошибиться в ожидании реализации signal() в boost. Потому что boost это уже охрененно большая библиотека и там есть много-много-много всякого. Ожидать что там есть обращение к какой-то очередной волшебной функции - это более-менее понятно.

alexy_blackтак выходит этот участок нормально собирется и в vs?Да конечно. signal() это всего-лишь функция. Компилятору абсолютно без разницы что функция делает и как она вообще работает.
Другое дело, какая реализация этой функции находится в той библиотеке которую ты подсунул на этапе линковки. Будет внутри реализации обращение к API OS, какая-то своя собственная обработка или вообще одинокий return. Все зависит от подсунутых линкеру библиотек. Но если ты дашь link хоть какую-то реализацию функции signal() - твоя программа нормально соберется в VS.
...
Рейтинг: 0 / 0
signal in not posix
    #39244338
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_blackтак выходит этот участок нормально собирется и в vs?
MSDN тебе посмотреть религия позволяет?

https://msdn.microsoft.com/en-us/library/xdkz3x12.aspx
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
signal in not posix
    #39245407
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, позволяет :) но чего-то не догадался, спасибо :) (я никогда на vs не делал ничего)

White Owl, согласен на счет cmake, но я использую её для того, чтобы можно было собирать на разных платформах :)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / signal in not posix
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]