2015-04-15 3 views
0

У меня есть одна программа, которая развивает другие программы. Когда разветвленные программы получают SIGUSR2, переменная в них должна изменяться. Я не уверен, как это сделать, потому что эта переменная не входит в объем функции, которую вызывает SIGUSR2.Можете ли вы установить локальные переменные через системные вызовы?

ответ

1

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

0

Настройка вашего вопроса не очень ясна, но для ответа в целом (и, возможно, немного педантично) код не меняет переменные, а код изменяет память.

То есть ... переменная - это просто удобный способ обратиться к ячейке памяти. «Изменение переменной» на самом деле просто меняет значение на своем месте в памяти. Это актуально, потому что, хотя очень удобно выполнять x = 5;, это не единственный способ изменить x. Любой код, который знает, где x живет в памяти и имеет разрешение на запись в это место, может поэтому изменить x.

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

В вашей формулировке указывается, что вы не только вызываете fork(), но и можете также выполнить exec'ing для другой программы ... даже если копия памяти родителя исчезнет.

Короче говоря, то, что вы пытаетесь сделать, вероятно, невозможно, не пройдя некоторые довольно уродливые хаки, и было бы целесообразно найти другое решение (такое как общая память).

+0

Я решил, что как обработчик SIGUSR2, так и локальная переменная были, по крайней мере, в том же процессе. Возможно, это было плохое предположение. –

+0

Возможно, вы правы - в этом случае ОП виновен в предоставлении большей информации, чем информация, необходимая, в то же время, не предоставляя достаточной информации о том, что он/она пытается сделать;) – mah

Смежные вопросы