gpt4 book ai didi

c - 如何使用信号挂起

转载 作者:太空狗 更新时间:2023-10-29 14:51:18 25 4
gpt4 key购买 nike

我有这段代码,我必须让程序重复等待信号。我的老师希望我们使用 sigsuspend 和掩码而不是暂停或 sleep 。我不熟悉 sigsuspend 或掩码,我知道 sigsuspend() 暂时用 mask 给定的掩码替换调用进程的信号掩码,然后暂停进程直到传递一个信号,该信号的作用是调用信号处理程序或终止进程。但是我该如何实现它。

#include <stdlib.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

unsigned Conta = 0;

void mypause(int sign)
{
switch (sign)
{
case SIGINT:
printf("You've pressed ctrl-C\n");
printf("I'm running waiting for a signal...\n");
Conta++;
break;

case SIGQUIT:
printf("You've pressd ctrl-\\n");
printf("Number of times you've pressed CTRL-C: %d", Conta);
exit(0);
break;
}
}

int main()
{
alarm(3);
printf("I'm Alive\n");

signal(SIGINT, mypause);
signal(SIGQUIT, mypause);
printf("I'm running, waiting for a signal...\n");
while (1)
{
}

return (0);
}

最佳答案

开始的简单方法是使用空掩码调用sigsuspend(即,任何信号都可以唤醒程序):

sigset_t myset;
(void) sigemptyset(&myset);
while (1) {
(void) printf("I'm running, waiting for a signal...\n");
(void) sigsuspend(&myset);
}

下一步将是使用 sigprocmask 来禁用您的两个已处理信号(SIGINTSIGQUIT)在 sigsuspend 中等待他们。然后,在挂起时,您将使用从 sigprocmask 获得的“旧掩码”,而不是空掩码。

关于c - 如何使用信号挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16041754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com