Linux多进程14-alarm函数

#include <unistd.h>
unsigned int alarm(unsigned int seconds);
    - 功能: 设置定时器, 函数调用后开始倒计时, 当倒计时为0时,
        函数会给当前进程发送一个信号:SIGALARM
    - 参数:
        seconds: 倒计时的时长, 单位:秒.
            - 如果参数为0, 定时器无效(不进行倒计时, 不发信号)
            - alarm(0); 取消一个定时器
    - 返回值:
        - 之前没定时器, 返回0
        - 之前有定时器, 返回之前的定时器剩余的时间

- SIGALARM: 默认终止当前的进程, 每一个进程都有且只有唯一的一个定时器
    alarm(10); //返回0
    过了1秒
    alarm(5); //返回上一个定时器剩余时间:9

    alarm(100); //该函数不阻塞

示例代码

#include <unistd.h>
#include <stdio.h>

int main(int argc, char const *argv[])
{
    int seconds = alarm(5);
    printf("seconds = %d\n", seconds); //0
    sleep(2);
    seconds = alarm(2);
    printf("seconds = %d\n", seconds); //3

    //10s 结束后, 程序会给当前进程发送SIGALARM信号, 程序终止, 不会死循环
    while (1)
    {
    }

    return 0;
}

运行

$./alarm 
seconds = 0
seconds = 3
闹钟

案例: 计算机一秒钟能数多少个数

// 1s 电脑能数多少个数

#include <stdio.h>
#include <unistd.h>

int main(int argc, char const *argv[])
{
    alarm(1);
    int i = 0;
    while (1)
    {
        printf("%i\n", i++);
    }

    return 0;
}

使用重定向到文件节省IO

$./alarmC >> alarmC.txt
闹钟
posted @ 2023-05-17 18:40  言叶以上  阅读(58)  评论(0编辑  收藏  举报