你能通过系统调用设置局部变量吗?

时间:2015-04-15 18:21:36

标签: c scope signals

我有一个程序可以分发其他程序。当分叉程序收到SIGUSR2时,它们中的变量应该改变。我不知道该怎么做,因为该变量不在SIGUSR2调用的函数范围内。

2 个答案:

答案 0 :(得分:1)

在C中,函数无法查看/操纵另一个函数本地变量的值(忽略指向局部变量的可见指针的可能性,该局部变量是静态的或在活动的调用帧中)。

答案 1 :(得分:0)

你的问题的设置不是很清楚,但要回答一般(也许有点迂腐),代码不会改变变量,代码会改变内存。

这是......变量只是一种引用内存位置的便捷方式。 "更改变量"实际上只是改变了它在内存中的位置。这是相关的,因为虽然执行x = 5;非常方便,但这不是改变x的唯一方法。任何知道x在内存中的位置以及是否有权写入该位置的代码都可能会更改x

在您的具体情况下,您将开始第二个过程。最初这个第二个进程有一个第一个进程的内存副本,让它读取相同的数据,但是通常只有在进行更改的进程中才能看到任何post-fork对内存的更改。

你的措辞表明你不仅要打电话给fork(),而且你也可以完全执行另一个程序......甚至可以制作父母的副本。记忆消失了。

简而言之,如果不经历一些相当丑陋的黑客攻击,你可能无法做到的事情,并且找到一个不同的解决方案(例如共享内存)肯定是值得的。