sigaction函数详解

一、sin函数

在讲述sigaction函数之前,我们需要先来了解一下sin函数。sin函数是数学中的三角函数之一,表示正弦函数。它是周期函数,可以用一个简单的图形表示,如下所示:

# include <stdio.h># include <math.h>int main(){    double x = 0.0;    double result = 0.0;    printf("x\tsin(x)\n");    printf("------------------------\n");    while(x <= 360.0)    {        result = sin(x * M_PI / 180);        printf("%.1f\t%.4f\n", x, result);        x += 10.0;    }    return 0;}

以上代码可以输出从0度到360度之间的sin值,结果如下:

x    sin(x)------------------------0.0    0.000010.0    0.173620.0    0.342030.0    0.500040.0    0.642850.0    0.766060.0    0.866070.0    0.939780.0    0.984890.0    1.0000100.0    0.9848110.0    0.9397120.0    0.8660130.0    0.7660140.0    0.6428150.0    0.5000160.0    0.3420170.0    0.1736180.0    0.0000190.0    -0.1736200.0    -0.3420210.0    -0.5000220.0    -0.6428230.0    -0.7660240.0    -0.8660250.0    -0.9397260.0    -0.9848270.0    -1.0000280.0    -0.9848290.0    -0.9397300.0    -0.8660310.0    -0.7660320.0    -0.6428330.0    -0.5000340.0    -0.3420350.0    -0.1736360.0    -0.0000

二、sin函数是奇函数

除此之外,还有一个特性-奇函数。所谓奇函数,就是在函数图象上具有对称轴,其表现形式为:f(-x)=-f(x)。由于sin函数图象具有一个对称轴,即y轴(值域),所以sin函数是一个奇函数。

代码示例如下:

# include <stdio.h># include <math.h>int main(){    double x = -180.0;    double result = 0.0;    printf("x\tsin(x)\tsin(-x)\n");    printf("------------------------\n");    while(x <= 180.0)    {        result = sin(x * M_PI / 180);        printf("%.1f\t%.4f\t%.4f\n", x, result, -result);        x += 10.0;    }    return 0;}

以上代码输出从-180度到180度之间的sin值及其相反数,结果如下:

x    sin(x)    sin(-x)-------------------------180.0    0.0000    -0.0000-170.0    -0.1736    0.1736-160.0    -0.3420    0.3420-150.0    -0.5000    0.5000-140.0    -0.6428    0.6428-130.0    -0.7660    0.7660-120.0    -0.8660    0.8660-110.0    -0.9397    0.9397-100.0    -0.9848    0.9848-90.0    -1.0000    1.0000-80.0    -0.9848    0.9848-70.0    -0.9397    0.9397-60.0    -0.8660    0.8660-50.0    -0.7660    0.7660-40.0    -0.6428    0.6428-30.0    -0.5000    0.5000-20.0    -0.3420    0.3420-10.0    -0.1736    0.17360.0        0.0000    -0.000010.0        0.1736    -0.173620.0        0.3420    -0.342030.0        0.5000    -0.500040.0        0.6428    -0.642850.0        0.7660    -0.766060.0        0.8660    -0.866070.0        0.9397    -0.939780.0        0.9848    -0.984890.0        1.0000    -1.0000100.0    0.9848    -0.9848110.0    0.9397    -0.9397120.0    0.8660    -0.8660130.0    0.7660    -0.7660140.0    0.6428    -0.6428150.0    0.5000    -0.5000160.0    0.3420    -0.3420170.0    0.1736    -0.1736180.0    0.0000    -0.0000

三、sin函数图

sin函数的图象是在以坐标轴为边界的矩形区域内,从y=0开始向上扭曲的曲线。由于sin函数是一个周期函数,所以曲线会在以原点为中心的对称轴处交叉。

以下是一个标准的sin函数的图象:

# include <stdio.h># include <math.h>int main(){    printf("Sin(x):\n");    for (double y = 1.0; y >= -1.0; y -= 0.1)    {        for (double x = 0.0; x <= 6.28; x += 0.1)        {            if (y  sin(x))            {                printf(".");            }            else            {                printf("|");            }        }        printf("\n");    }    return 0;}

以上代码可以输出一个标准的sin函数图像,结果如下:

Sin(x):                      |                 |     |                 |     |            |     |     |            |     |     |                      .   .                 |   |                 |   |                |    .             |          .         |             |        |              |       |              |     |                |    |                   |  |                   ||           

四、signal函数和sig函数

接下来我们来看一下signal函数和sig函数,它们与sigaction函数密切相关。

signal函数的作用是为接收到的信号设置自定义的处理函数,其原型如下:

 void (*signal(int signum, void (*handler)(int)))(int);

signal函数的第一个参数是信号编号,第二个参数是信号处理函数的地址,函数指针类型为void (*)(int),即接受一个int类型参数,返回void。

sig函数的作用与signal函数相同,用于设置信号处理函数,并且可以保存原处理函数的地址,其原型如下:

void (*sig(int signum, void (*handler)(int)))(int);

signal函数和sig函数都是用来设置信号处理函数的,接下来我们以signal函数为例,来看一下具体的用法。

以下代码设置了SIGINT信号(即ctrl+c),并常规捕获该信号。

# include <stdio.h># include <stdlib.h># include <signal.h>void sig_int(int signo){    printf("received SIGINT\n");}int main(){    if (signal(SIGINT, sig_int) == SIG_ERR)    {        fprintf(stderr, "signal error\n");        exit(1);    }    for(;;)    {        pause();    }}

当我们运行以上代码时,程序会进入死循环,等待SIGINT信号的到来。如果收到该信号,便会打印出信息”received SIGINT”,并正常退出程序。

五、sigaction函数

sigaction函数是一种较为高级的信号处理函数,与signal函数的差异在于其更加精确且可靠,可以更好地控制信号的处理方式。

sigaction函数的原型如下:

int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);

sigaction函数有三个参数:

  • signum表示信号编号
  • act表示新的信号处理方法
  • oldact返回原有的信号处理方法

以下代码实现了SIGINT信号的自定义处理,如下所示:

# include <stdio.h># include <stdlib.h># include <signal.h>void sig_int(int signo){    printf("received SIGINT\n");}int main(){    struct sigaction newact, oldact;    newact.sa_handler = sig_int;    sigemptyset(&newact.sa_mask);    newact.sa_flags = SA_RESETHAND;    if (sigaction(SIGINT, &newact, &oldact) < 0)    {        fprintf(stderr, "sigaction error\n");        exit(1);    }    for (;;)    {        pause();    }}

以上代码中,首先定义了newact和oldact两个结构体变量,分别代表了新的信号处理方法和旧的信号处理方法。然后,通过初始化newact变量的成员,将其设为SIGINT信号的自定义处理方式,并用sigaction函数进行设置。最后,进入死循环,等待接收信号。

六、sin函数导数

sigaction函数和sin函数在形式上不断地出现,我们接下来以sin函数的导数来讲述sigaction函数的操作

一个函数在某一点的导数,即在该点处的切线斜率。假设f(x)是在点x0处可微,则其导数表达式可以写作

f'(x) = lim(h->0) f(x0+h) - f(x0) / h

由于计算机无法处理”无限小”的概念,我们需要使用数值计算的方法来进行求解。以下代码可以计算sin(x)函数在x=0.0处的导数,结果如下所示:


# include <stdio.h>
# include <math.h>

double f(double x)
{
return sin(x);
}

double df(double x)
{
double eps = 1e-8;
return (f(x + eps) - f(x)) / eps;
}

int main()
{
printf("sin

原创文章,作者:CAGL,如若转载,请注明出处:https://www.506064.com/n/138260.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
CAGL的头像CAGL
上一篇 2024-10-04 00:19
下一篇 2024-10-04 00:19

相关推荐

  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python中capitalize函数的使用

    在Python的字符串操作中,capitalize函数常常被用到,这个函数可以使字符串中的第一个单词首字母大写,其余字母小写。在本文中,我们将从以下几个方面对capitalize函…

    编程 2025-04-29
  • Python中set函数的作用

    Python中set函数是一个有用的数据类型,可以被用于许多编程场景中。在这篇文章中,我们将学习Python中set函数的多个方面,从而深入了解这个函数在Python中的用途。 一…

    编程 2025-04-29
  • 三角函数用英语怎么说

    三角函数,即三角比函数,是指在一个锐角三角形中某一角的对边、邻边之比。在数学中,三角函数包括正弦、余弦、正切等,它们在数学、物理、工程和计算机等领域都得到了广泛的应用。 一、正弦函…

    编程 2025-04-29
  • 单片机打印函数

    单片机打印是指通过串口或并口将一些数据打印到终端设备上。在单片机应用中,打印非常重要。正确的打印数据可以让我们知道单片机运行的状态,方便我们进行调试;错误的打印数据可以帮助我们快速…

    编程 2025-04-29
  • Python3定义函数参数类型

    Python是一门动态类型语言,不需要在定义变量时显示的指定变量类型,但是Python3中提供了函数参数类型的声明功能,在函数定义时明确定义参数类型。在函数的形参后面加上冒号(:)…

    编程 2025-04-29
  • Python实现计算阶乘的函数

    本文将介绍如何使用Python定义函数fact(n),计算n的阶乘。 一、什么是阶乘 阶乘指从1乘到指定数之间所有整数的乘积。如:5! = 5 * 4 * 3 * 2 * 1 = …

    编程 2025-04-29
  • Python定义函数判断奇偶数

    本文将从多个方面详细阐述Python定义函数判断奇偶数的方法,并提供完整的代码示例。 一、初步了解Python函数 在介绍Python如何定义函数判断奇偶数之前,我们先来了解一下P…

    编程 2025-04-29
  • Python函数名称相同参数不同:多态

    Python是一门面向对象的编程语言,它强烈支持多态性 一、什么是多态多态是面向对象三大特性中的一种,它指的是:相同的函数名称可以有不同的实现方式。也就是说,不同的对象调用同名方法…

    编程 2025-04-29
  • 分段函数Python

    本文将从以下几个方面详细阐述Python中的分段函数,包括函数基本定义、调用示例、图像绘制、函数优化和应用实例。 一、函数基本定义 分段函数又称为条件函数,指一条直线段或曲线段,由…

    编程 2025-04-29

发表回复

登录后才能评论