У меня есть одна программа, которая развивает другие программы. Когда разветвленные программы получают SIGUSR2, переменная в них должна изменяться. Я не уверен, как это сделать, потому что эта переменная не входит в объем функции, которую вызывает SIGUSR2.Можете ли вы установить локальные переменные через системные вызовы?
ответ
В C функция не может видеть/манипулировать значением переменной локальной для другой функции (игнорируя возможность видимого указателя, указывающего на локальную переменную, которая является либо статической, либо в активном кадре вызова).
Настройка вашего вопроса не очень ясна, но для ответа в целом (и, возможно, немного педантично) код не меняет переменные, а код изменяет память.
То есть ... переменная - это просто удобный способ обратиться к ячейке памяти. «Изменение переменной» на самом деле просто меняет значение на своем месте в памяти. Это актуально, потому что, хотя очень удобно выполнять x = 5;
, это не единственный способ изменить x
. Любой код, который знает, где x
живет в памяти и имеет разрешение на запись в это место, может поэтому изменить x
.
В вашем конкретном случае вы начинаете второй процесс. Первоначально этот второй процесс имеет копию памяти первого, позволяя ему считывать одни и те же данные, но типично, что любые изменения после записи в памяти видны только в процессе, который внес изменения.
В вашей формулировке указывается, что вы не только вызываете fork()
, но и можете также выполнить exec'ing для другой программы ... даже если копия памяти родителя исчезнет.
Короче говоря, то, что вы пытаетесь сделать, вероятно, невозможно, не пройдя некоторые довольно уродливые хаки, и было бы целесообразно найти другое решение (такое как общая память).
- 1. Можете ли вы создавать локальные переменные без `let`?
- 2. Можете ли вы динамически добавлять локальные переменные в функцию?
- 3. Могу ли я выполнять «локальные» системные вызовы с использованием запроса?
- 4. Локальные переменные или повторные вызовы?
- 5. Можете ли вы установить переменные класса в параметрах метода конструктора?
- 6. Можно ли получить локальные переменные через отражение?
- 7. Системные вызовы и системные программы
- 8. Системные вызовы труб
- 9. Есть ли в группе переменные-локальные переменные?
- 10. Системные вызовы в Windows
- 11. Системные вызовы, сделанные KVM
- 12. Как написать терминалу UNIX через системные вызовы?
- 13. Можете ли вы получить переменные вызывающего класса?
- 14. Можете ли вы импортировать переменные в .bashrc?
- 15. Можете ли вы добавить переменные в словарь
- 16. Можете ли вы назначить переменные таким образом?
- 17. Можете ли вы добавить переменные внутри «cout»
- 18. Можете ли вы использовать переменные таким образом
- 19. Можно ли перехватить системные вызовы через Theos Tweak? Jailed Version
- 20. Можете ли вы установить внешние пакеты через навес?
- 21. Можете ли вы отключить системные звуки для приложения .NET?
- 22. Безопасны ли локальные переменные?
- 23. Сборочные и системные вызовы
- 24. Системные вызовы Windows-программ
- 25. windbg log системные вызовы
- 26. Установить системные переменные Windows с Java
- 27. Установить системные переменные, зависящие от проекта
- 28. Как установить системные переменные из Java?
- 29. Системные вызовы в OS/161
- 30. Системные вызовы, управляющие каталогами
Я решил, что как обработчик SIGUSR2, так и локальная переменная были, по крайней мере, в том же процессе. Возможно, это было плохое предположение. –
Возможно, вы правы - в этом случае ОП виновен в предоставлении большей информации, чем информация, необходимая, в то же время, не предоставляя достаточной информации о том, что он/она пытается сделать;) – mah