C语言函数大全-- y 开头的函数

2023-11-17

1. yperror

1.1 函数说明

函数声明 函数功能
void yperror(char *msg); 在 UNIX 和 Linux 系统中用于将 NISNetwork Information Service)错误代码转换为相应的错误信息

参数:

  • msg : 指向一个字符数组的指针,表示 附加的消息

yperror() 函数打印出与最后一次调用 NIS 服务相关联的错误消息,以及任何作为 msg 参数传递的附加消息。

1.2 演示示例

#include <stdio.h>
#include <rpcsvc/ypclnt.h>

int main()
{
    char *domain = "example.com";
    char *map = "passwd.byname";
    int result;

    result = yp_match(domain, map, "johndoe", 7, &value, &vallen);

    if (result != 0)
    {
        yperror("Error getting NIS information");
        return 1;
    }

    printf("User data: %s\n", value);

    return 0;
}

2. yp_match

2.1 函数说明

函数声明 函数功能
int yp_match(const char *domain, const char *map, const char *key, int keylen, char **val, int *vallen); 在网络信息服务中使用的函数,用于查找 NIS 数据库中的条目

参数:

  • domain : 要查询的NIS域名
  • map : 要查询的映射表名称
  • key : 要查找的键的值
  • keylen : 键值的长度
  • val : 指向一个指针,该指针将被设置为匹配键的值。如果该键未找到,则指针将被设置为NULL
  • vallen: 指向一个整数,它在调用时必须初始化为指定缓冲区大小,返回时包含实际读取的字节数

返回值:

  • 0:成功找到匹配项
  • YPERR_KEY:没有找到指定的键
  • YPERR_DOMAIN:指定的NIS域无法解析
  • YPERR_MAP:指定的映射表不存在
  • YPERR_YPBIND:无法联系ypproc_bind进程
  • YPERR_RPC :RPC故障

2.2 演示示例

详见 1.2 中的演示示例

3. y0【零阶第二类贝塞尔函数】

3.1 函数说明

函数声明 函数功能
double y0(double x); 计算 x 的零阶第二类贝塞尔函数

参数:

  • x : 待计算的值

3.2 演示示例

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

int main() 
{
    double x = 2.5;
    //  计算 x 的零阶第二类贝塞尔函数
    double result = y0(x); 
    printf("y0(%lf) = %lf\n", x, result);
    return 0;
}

3.3 运行结果

在这里插入图片描述

4. y1【一阶第二类贝塞尔函数】

4.1 函数说明

函数声明 函数功能
double y1(double x); 计算 x 的一阶第二类贝塞尔函数

参数:

  • x : 待计算的值

4.2 演示示例

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

int main() 
{
    double x = 2.5;
    //  计算 x 的一阶第二类贝塞尔函数
    double result = y1(x); 
    printf("y1(%lf) = %lf\n", x, result);
    return 0;
}

4.3 运行结果

在这里插入图片描述

5. yn【n 阶第二类贝塞尔函数】

5.1 函数说明

函数声明 函数功能
double yn(int n, double x); 计算 xn 阶第二类贝塞尔函数

参数:

  • n : 第二类贝塞尔函数的阶数
  • x : 待计算的值

5.2 演示示例

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

int main() {
    double x = 1.0;
    int n = 2;
    // 二阶第二类贝塞尔函数
    double value = yn(n, x);
    printf("The value of Y_%d(%.2lf) is: %lf\n", n, x, value);
    return 0;
}

5.3 运行结果

在这里插入图片描述

6. yield_to

6.1 函数说明

函数声明 函数功能
void yield_to(struct task_struct *next); 它是 Linux 内核中的函数,用于将 CPU 控制权从一个进程转移到另一个进程

参数:

  • next : 要切换到的进程的任务结构体指针

6.2 演示示例

#include <linux/sched.h>

asmlinkage void sys_yield(void)
{
    struct task_struct *next, *prev;

    prev = current; // 保存当前进程
    next = list_entry(prev->tasks.next, struct task_struct, tasks); // 获取下一个进程

    yield_to(next); // 切换到下一个进程
}

上述的这个示例程序是一个系统调用,当用户调用 sys_yield() 时,它将获取下一个进程并将控制权传递给它。

注意,在实际的 Linux 内核代码中,yield_to() 函数有更多的参数和复杂的实现细节,因此这个示例仅仅是为了演示其基本思想。

7. yield_to_for

7.1 函数说明

函数声明 函数功能
void yield_to_for(struct task_struct *prev, struct task_struct *next, long timeout); 它是 Linux 内核中的一个函数,用于协作式多任务调度

参数:

  • prev : 指向当前正在运行的任务的 task_struct 结构体
  • next : 指向即将要运行的任务的 task_struct 结构体。
  • timeout : 指示当前任务在放弃 CPU 之前应该等待的时间

yield_to_for() 函数的作用是让当前任务主动让出 CPU,让其他任务有机会运行。

  • 如果 timeout 参数大于零,则当前任务会等待指定的时间后再次运行;
  • 如果 timeout 参数为零,则当前任务会立即重新运行;
  • 如果 timeout 参数小于零,则当前任务不会自动重新运行,直到其他事件发生时再次被唤醒。

7.2 演示示例

#include <linux/sched.h>
#include <linux/time.h>
#include <linux/timer.h>

static int my_tasklet_id;
static struct timer_list my_timer;

void my_tasklet(unsigned long data)
{
    printk("my_tasklet called\n");
}

void my_timer_callback(unsigned long data)
{
    struct task_struct *prev = current;
    struct task_struct *next = &init_task;

    printk("my_timer_callback called\n");

    /* 让当前任务主动让出 CPU */
    yield_to_for(prev, next, 0);

    /* 使用 tasklet 调度后续处理 */
    tasklet_schedule(&my_tasklet);
}

int init_module(void)
{
    printk("module loaded\n");

    /* 注册一个定时器,并在 1 秒后触发回调函数 */
    init_timer(&my_timer);
    my_timer.function = my_timer_callback;
    my_timer.data = 0;
    my_timer.expires = jiffies + HZ;
    add_timer(&my_timer);

    /* 注册一个 tasklet */
    my_tasklet_id = __tasklet_hi_schedule(my_tasklet, 0);

    return 0;
}

void cleanup_module(void)
{
    printk("module unloaded\n");

    /* 删除定时器和 tasklet */
    del_timer_sync(&my_timer);
    tasklet_kill(&my_tasklet);
}

在上述的示例代码中,我们定义了一个定时器和一个 tasklet,定时器的回调函数 my_timer_callback() 中调用了 yield_to_for() 函数,让当前任务主动让出 CPU。当定时器到期时,在内核的调度过程中,会先运行其他可运行的任务,然后再次运行当前任务,并执行 tasklet_schedule,以调度后续处理。

8. yield_to_forced

8.1 函数说明

函数声明 函数功能
void yield_to_forced(struct task_struct *t); 它是 Linux 内核中的一个函数,用于将当前进程放弃 CPU,并强制切换到指定的进程 t 所在的 CPU上执行

参数:

  • t : 待复制的宽字符串

8.2 演示示例

#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/sched.h>

static int __init my_init(void)
{
    struct task_struct *p, *next;

    printk(KERN_INFO "Start of yield_to_forced example.\n");

    // 打印当前进程和它的PID
    printk(KERN_INFO "Current process: %s, PID: %d\n", current->comm, current->pid);

    // 遍历进程列表,寻找一个不是当前进程的进程
    for_each_process(p)
    {
        if (p != current)
        {
            next = p;
            break;
        }
    }

    // 如果找到了,则将当前进程放弃CPU,并强制切换到找到的进程所在的CPU上执行
    if (next)
    {
        yield_to_forced(next);
        printk(KERN_INFO "Switched to process: %s, PID: %d\n", next->comm, next->pid);
    }
    else
    {
        printk(KERN_INFO "No other process found.\n");
    }

    printk(KERN_INFO "End of yield_to_forced example.\n");

    return 0;
}

static void __exit my_exit(void)
{
    printk(KERN_INFO "Module exit.\n");
}

module_init(my_init);
module_exit(my_exit);

MODULE_LICENSE("GPL v2");
MODULE_AUTHOR("ChatGPT");
MODULE_DESCRIPTION("An example of using yield_to_forced function.");

上述的示例代码中,首先遍历进程列表,找一个不是当前进程的进程;如果找到了,则使用 yield_to_forced() 函数将当前进程放弃 CPU,并强制切换到找到的进程所在的 CPU 上执行。如果找不到这样的进程,则打印一个提示信息。

注意:yield_to_forced() 函数只有在实时进程中才能使用,否则会导致内核崩溃。因此,在使用该函数时一定要小心。

9. yield_to_if_needed

9.1 函数说明

函数声明 函数功能
void yield_to_if_needed(struct task_struct *prev); 将 CPU 资源让给其他需要运行的任务

参数:

  • prev : 当前正在运行的任务结构体的指针

该函数会检查任务 prev 是否需要放弃 CPU 并将控制权交给其他需要运行的任务。如果需要,它将调用 schedule() 函数来选择下一个要运行的任务,并将控制权转移给它。在此过程中,该函数还会执行几个与调度相关的操作,例如检查新选定的任务是否具有更高的优先级,以及将当前任务从 CPU 上下文中删除。

9.2 演示示例

#include <linux/kernel.h>
#include <linux/sched.h>

void my_task_function(void)
{
    while (!kthread_should_stop()) {
        // Do some work here...
        yield_to_if_needed(current);
    }
}

struct task_struct *my_task;

int init_module(void)
{
    my_task = kthread_create(my_task_function, NULL, "my_task");
    if (IS_ERR(my_task)) {
        printk(KERN_ERR "Failed to create my_task\n");
        return PTR_ERR(my_task);
    }

    wake_up_process(my_task);
    return 0;
}

void cleanup_module(void)
{
    kthread_stop(my_task);
}

在上述的示例代码中,

  • 首先,我们创建了一个名为 my_task 的内核线程,并将其添加到运行队列中;
  • 然后,在 my_task_function() 中调用 yield_to_if_needed() 函数,以便在必要时放弃 CPU 控制权;
  • 最后,在模块卸载时,我们停止了 my_task 线程。

10. yield_to_when_done

10.1 函数说明

函数声明 函数功能
void yield_to_when_done(struct task_struct *prev, long state); 它一个 Linux 内核中的函数,它允许当前进程在执行完特定任务时将 CPU 资源让给其他进程,以避免浪费 CPU 时间

参数:

  • prev : 前一个进程的指针
  • state : 进程的状态

10.2 演示示例

#include <linux/sched.h>
#include <linux/kernel.h>
#include <linux/module.h>

static int my_module_init(void) 
{
    printk(KERN_INFO "Module initialized.\n");

    struct task_struct *prev = current;
    long state = TASK_INTERRUPTIBLE;

    // 执行某些任务

    yield_to_when_done(prev, state);

    return 0;
}

static void my_module_exit(void) 
{
    printk(KERN_INFO "Module exited.\n");
}

module_init(my_module_init);
module_exit(my_module_exit);
MODULE_LICENSE("GPL");

在上述的示例代码中,当模块被加载时,my_module_init() 函数会被调用:

  • 首先,在my_module_init() 函数中,我们打印一条日志;
  • 然后,获取当前进程的指针并将其赋值给 prev 变量;同时,我们将进程的状态设置为可中断状态(TASK_INTERRUPTIBLE);
  • 接着,我们执行某些任务;
  • 随后,调用 yield_to_when_done() 函数,将 CPU 资源让出;
  • 最后,my_module_exit() 函数用于在模块被卸载时清理资源。

参考

  1. [Bessel Function of the Second Kind]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言函数大全-- y 开头的函数 的相关文章

  • C语言函数大全-- _w 开头的函数(4)

    w 开头的函数 4 1 wstrtime 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 wstrtime s 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 wsetlocale 3 1 函数说明 3 2 演示示例 3
  • C语言函数大全-- x 开头的函数(3)

    x 开头的函数 3 1 xdr opaque 1 1 函数说明 1 2 演示示例 2 xdr opaque auth 2 1 函数说明 2 2 演示示例 2 2 1 opaque auth 2 2 2 test c 3 xdr pointe
  • C语言函数大全-- l 开头的函数

    l 开头的函数 1 labs llabs 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 ldexp ldexpf ldexpl 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 ldiv lldiv 3 1 函数说明 3
  • C语言函数大全-- p 开头的函数

    p 开头的函数 1 perror 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 pieslice 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 pow powf powl 3 1 函数说明 3 2 演示示例 3 3
  • C语言函数大全-- l 开头的 Linux 内核函数(链表管理函数)

    l 开头的 Linux 内核函数 链表管理函数 1 list add list add tail 1 1 函数说明 1 2 演示示例 2 list cut before list cut position 2 1 函数说明 2 2 演示示例
  • C语言函数大全-- s 开头的函数(3)

    s 开头的函数 3 1 sleep 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 sopen 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 sound 3 1 函数说明 3 2 演示示例 4 spawnl 4 1 函
  • C语言函数大全-- s 开头的函数(2)

    s 开头的函数 2 1 setlinestyle 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 setmem 2 1 函数说明 2 2 演示示例 3 setmode 3 1 函数说明 3 2 演示示例 3 3 运行结果 4 se
  • C语言函数大全-- z 开头的函数

    z 开头的函数 1 zalloc 1 1 函数说明 1 2 演示示例 2 zcalloc 2 1 函数说明 2 2 演示示例 3 zcfree 3 1 函数说明 3 2 演示示例 4 zclearerr 4 1 函数说明 4 2 演示示例
  • C语言函数大全-- u 开头的函数

    u 开头的函数 1 ultoa 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 ungetc 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 ungetch 3 1 函数说明 3 2 演示示例 3 3 运行结果 4 un
  • C语言函数大全-- t 开头的函数

    t 开头的函数 1 tan tanf tanl 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 tanh tanhf tanhl 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 tell 3 1 函数说明 3 2 演示示
  • C语言函数大全-- v 开头的函数

    v 开头的函数 1 va start 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 va arg 2 1 函数说明 2 2 演示示例 3 va copy 3 1 函数说明 3 2 演示示例 4 va end 4 1 函数说明 4
  • C语言函数大全--e开头的函数

    e开头的函数 1 ecvt 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 ellipse 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 eof 3 1 函数说明 3 2 演示示例 3 3 运行结果 4 execl 4
  • C语言函数大全--h开头的函数

    h开头的函数或宏 1 hypot hypotf hypotl 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 HUGE VAL HUGE VALF HUGE VALL 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 ha
  • C语言函数大全-- x 开头的函数(1)

    x 开头的函数 1 1 xdr accepted reply 1 1 函数说明 1 2 演示示例 1 2 1 accepted reply 1 2 2 Test c 2 xdr array 2 1 函数说明 2 2 演示示例 3 xdr a
  • C语言函数大全-- k 开头的函数

    k 开头的函数 1 kcalloc 1 1 函数说明 1 2 演示示例 2 kbhit 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 keep 3 1 函数说明 3 2 演示示例 4 kernel thread 4 1 函数说明
  • C语言函数大全-- r 开头的函数

    r 开头的函数 1 raise 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 rand 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 read 3 1 函数说明 3 2 演示示例 3 3 运行结果 4 realloc
  • C语言函数大全-- y 开头的函数

    y 开头的函数 1 yperror 1 1 函数说明 1 2 演示示例 2 yp match 2 1 函数说明 2 2 演示示例 3 y0 零阶第二类贝塞尔函数 3 1 函数说明 3 2 演示示例 3 3 运行结果 4 y1 一阶第二类贝塞
  • C语言函数大全--f开头的函数(下)

    f开头的函数 下 21 floor floorf floorl 21 1 函数说明 21 2 演示示例 21 3 运行结果 22 flushall 22 1 函数说明 22 2 演示示例 22 3 运行结果 23 fma fmaf fmal
  • C语言函数大全-- i 开头的函数

    i 开头的函数 1 imagesize 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 initgraph 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 inport 3 1 函数说明 3 2 演示示例 4 insli
  • C语言函数大全-- x 开头的函数(4)

    x 开头的函数 4 1 xdr struct 1 1 函数说明 1 2 演示示例 2 xdr u char 2 1 函数说明 2 2 演示示例 3 xdr u hyper 3 1 函数说明 3 2 演示示例 4 xdr u int 4 1

随机推荐

  • GDAL-2.4.0 获取Hadoop-3.1.2 hdfs tif文件信息

    GDAL 2 4 0 获取Hadoop 3 1 2 hdfs tif文件信息 GDAL 2 4 0增加了以下功能 Add vsihdfs virtual file system handler for Hadoop File System
  • Android 反编译Apk,修改资源,重新打包,签名发布

    本文简单介绍apk是如何修改logo ic launcher 类似的资源文件修改也可以通过此方式 不过要修改class的话就要涉及到smali的学习了 这里就暂且不谈 后续有需要再做更新 一 工具介绍 apktool 用来反编译apk ap
  • 【华为OD机试真题 JAVA】最多的连续胡杨棵树

    标题 最多的连续胡杨棵树 时间限制 1秒 内存限制 262144K 语言限制 不限 近些年来 我国防沙治沙取得显著成果 某沙漠新种植N棵胡杨 编号1 N 排成一排 一个月后 有M棵胡杨未能成活 现可补种胡杨K棵 请问如何补种 只能补种 不能
  • 【JS基础】通俗易懂的讲清楚去抖/防抖、节流。外加手写深度比较

    文章目录 去抖 防抖 思路解析 节流 两者在vue中结合计算属性使用 深度比较 去抖 防抖 去抖也叫防抖 为了照顾JS初学者的理解和记忆 我就简单的说明一下 我们生活中很多出现抖动的现象 都是没有规律的 例如人的发抖 树叶在风中的抖动 海浪
  • java mysql 断开连接_mysql java连接异常及断开解决秘籍

    3 The last packet sent successfully to the server was 0 milliseconds ago The driver has not received any packets from th
  • 前端一年的经验,面试官都会问一些什么问题呢?都是这样一些的问题

    面试准备阶段 学习以及复习基础知识 这一定是第一步需要做的事情 先制定规划 然后按照这一条既定的规划去学习以及复习 可分为六部分去准备 css部分 像 css这一部分 面试必问 但是它的东西很杂很多 我不知道有多少人和我感觉一样 学习前端最
  • Oracle中Delete和Commit操作的流程分析

    以后还会陆续加入其他各种操作的实现机制 1 删除 Delete 流程 Oracle读Block 数据块 到Buffer Cache 缓冲区 如果该Block在Buffer中不存在 在Redo Log Buffer 重做日志缓冲区 中记录De
  • Leetcode【DFS BFS】

    Leetcode 200 岛屿数量 题目 解题 思路 DFS解法 BFS解法 题目 给你一个由 1 陆地 和 0 水 组成的的二维网格 请你计算网格中岛屿的数量 岛屿总是被水包围 并且每座岛屿只能由水平方向和 或竖直方向上相邻的陆地连接形成
  • ES6 method写法与TypeError: is not a constructor

    公司前端最近开始强推ESlint 很多文件需要逐步修改为符合ESlint规则的形式 结果遇到了一个神奇的问题 有一段类似这样的代码 let obj init function el 此处ESlint检查提示 Expect method sh
  • k8s部署tomcat及web应用_在k8s部署tomcat

    小试牛刀 准备编排文件tomcat yaml 包含两部分 副本rc和service配置可为两个文件 不过我们此处合并为一个 rc副本相关 apiVersion extensions v1beta1 表示Deployment调度配置 kind
  • Keras默认权值初始化方式

    20230117 在最初使用Keras进行神经网络编程的时候 除了设置神经元个数 层数 或者激活函数之后 基本上对神经网络内部就不怎么管了 所以最后很多参数都是默认的 这种情况一般遇到的数据集问题 都能轻易解决 一般不是层数非常深的神经网络
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • Kali系统(Debian 10.3) 遇到的问题

    目录 问题一 Kali系统 相关技术网站 博客 文章 论坛 工具包 包跟踪 提交BUG 问题二 黑客入门 手痒地方 问题三 Kali系统 MySQL问题Can t connect to local MySQL server through
  • 边缘计算操作系统安装及测试实验报告

    边缘计算操作系统安装及测试 一 实验目的 二 实验环境 三 实验原理 1 系统组成部分 2 总体数据流程 四 实验步骤及结果 1 安装 Docker 和 Docker Compose 2 下载 EdgeX compose 文件 3 运行Ed
  • qt中clicked(bool checked)和toggled(bool checked)的区别

    先来看qt文档的解释 上面看出 共同点是 当点击按钮时 状态信号都会被发送 不同点 clicked this signal is not emitted if you call setDown setChecked or toggle to
  • 5年测试面试要20K,面试三个问题把我打发走了···

    都说金三银四 金九银十跳槽涨薪季 我是着急忙慌的准备简历 5年软件测试经验 可独立测试大型产品项目 熟悉项目测试流程 薪资要求 5年测试经验起码能要个20K吧 我加班肝了一页半简历 投出去一周 面试电话倒是不少 自信满满去面试 现场被问了这
  • Nmap源码分析(服务与版本扫描)

    Nmap源码分析 服务与版本扫描 2012年8月23日 在进行端口扫描后 Nmap可以进一步探测出运行在端口上的服务类型及应用程序的版本 目前Nmap可以识别几千种服务程序的签名 Signature 覆盖了180多种应用协议 比如 端口扫描
  • java写后端接口中mapper的一些操作

    文章目录 Mybatis Mapper的动态SQL语句问题 一 if 二 choose when otherwise 三 where 四 trim 元素来定制 where 元素的功能 五 set 动态地在行首插入 SET 关键字 六 for
  • PTA 7-4 统计学生平均成绩与及格人数 (15 分)

    本题要求编写程序 计算学生们的平均成绩 并统计及格 成绩不低于60分 的人数 题目保证输入与输出均在整型范围内 输入格式 输入在第一行中给出非负整数N 即学生人数 第二行给出N个非负整数 即这N位学生的成绩 其间以空格分隔 输出格式 按照以
  • C语言函数大全-- y 开头的函数

    y 开头的函数 1 yperror 1 1 函数说明 1 2 演示示例 2 yp match 2 1 函数说明 2 2 演示示例 3 y0 零阶第二类贝塞尔函数 3 1 函数说明 3 2 演示示例 3 3 运行结果 4 y1 一阶第二类贝塞