信号处理程序在c中改变全局变量

时间:2018-05-10 08:24:02

标签: c process global-variables signals

这样的结构是在我的每个子进程中创建的。

struct locker_t {
  uint16_t id;
  uint16_t user_id;
  uint8_t locked;
  uint8_t owned;
  int write_fd;
  int read_fd;
  int owner;
};

我希望我的子进程能够处理信号SIGUSR1和SIGUSR2。 如果孩子收到SIGUSR1,则将locker_t.locked更改为1.如果孩子收到SIGUSR2,孩子也会将locker_t.locked更改为0。 所以我创建了一个名为int lockSig的全局变量,它等于-1开始。我还创建了两个信号处理程序:

void lockHandler(int sig){
    lockSig=1;
}

void unlockHandler(int sig){
    lockSig=0;
}

我也有这两个接收信号并改变锁定:

signal(SIGUSR1,lockHandler);
signal(SIGUSR2,unlockHandler);
if(strcmp(buffer,"LOCK")==0||lockSig==1)//if lockSig is 1 then enter the if{
    lock.locked=1;
    fscanf(kid,"%d",&temp);//wait parent to run until gets an input
    lockSig=-1;//change back to -1, wait for next signal
}


if(strcmp(buffer,"UNLOCK")==0||lockSig==0)//if lockSig is 0 then enter the if{
    lock.locked=0;
    fscanf(kid,"%d",&temp);//wait parent to run until gets an input
    lockSig=-1;//change back to -1, wait for next signal
}

但是我的程序没有改变lock.locked。 I'm pretty sure the child gets the signal since I used printf to test it. I'm also using a infinite loop to read pipe inputs from parent and everything else works perfectly.这是我第一次使用信号处理程序。我花了很多钱在谷歌试图找出如何做到这一点。真的需要一些帮助。

0 个答案:

没有答案