История изменений
Исправление firkax, (текущая версия) :
А вы, ведь, не хотите, чтобы вызвав «зараженный» ping в торговом приложении, оно начало рассылать по сети враждебные команды или пытаться строить из себя MitM?
Выглядит как перевод с другого языка.
Всегда защищайте файловые дескрипторы флагом FD_CLOEXEC, если планируете вызывать fork+execv для программ, которые не должны их видеть.
Или можно просто сделать closefrom(3); ну или его аналог если какие-то дескрипторы надо сохранить. Это в целом надёжнее, т.к. если используешь какие-то сторонние библиотеки - не всегда есть контроль за тем, что и как они открывают.
Блокирование главной нити программы для выполнения какой-то операции очень плохая практика. Значит нам нужно создавать отдельную нить для выполнения там system()
Во-первых, system можно сделать неблокирующим средствами шелла (но код завершения потом уже не узнать), а во-вторых system обычно вызывают как раз для того, чтобы сделать всё с ожиданием завершения, примерно как это делается в шелл-скриптах. Ну и о мультитреде в таких программах речь обычно не идёт. Ещё много чего можно написать, лень, суть такова: ты не понял зачем нужен system, он не для тонкого управления потоками выполнения программ, а для скрипто-подобного простого запуска подпрограммы с ожиданием. И эту функцию он выполняет хорошо.
Исходная версия firkax, :
А вы, ведь, не хотите, чтобы вызвав «зараженный» ping в торговом приложении, оно начало рассылать по сети враждебные команды или пытаться строить из себя MitM?
Выглядит как перевод с другого языка.
Всегда защищайте файловые дескрипторы флагом FD_CLOEXEC, если планируете вызывать fork+execv для программ, которые не должны их видеть.
Или можно просто сделать closefrom(3); ну или его аналог если какие-то дескрипторы надо сохранить. Это в целом надёжнее, т.к. если используешь какие-то сторонние библиотеки - не всегда есть контроль за тем, то и как они открывают.
Блокирование главной нити программы для выполнения какой-то операции очень плохая практика. Значит нам нужно создавать отдельную нить для выполнения там system()
Во-первых, system можно сделать неблокирующим средствами шелла (но код завершения потом уже не узнать), а во-вторых system обычно вызывают как раз для того, чтобы сделать всё с ожиданием завершения, примерно как это делается в шелл-скриптах. Ну и о мультитреде в таких программах речь обычно не идёт. Ещё много чего можно написать, лень, суть такова: ты не понял зачем нужен system, он не для тонкого управления потоками выполнения программ, а для скрипто-подобного простого запуска подпрограммы с ожиданием. И эту функцию он выполняет хорошо.