C语言函数大全-- x 开头的函数(1)

2023-11-10

本篇介绍C语言函数大全-- x 开头的函数(1)

1. xdr_accepted_reply

1.1 函数说明

函数声明 函数功能
bool_t xdr_accepted_reply(XDR *xdrs, struct accepted_reply *ar); 用于将 RPC(远程过程调用)应答中的 accepted_reply 结构体编码为 XDR 格式,或者从 XDR 数据流中解码 accepted_reply 结构体

参数:

  • xdrs : 指向 XDR 数据流的指针
  • ar: 指向 accepted_reply 结构体的指针。其中 accepted_reply 结构定义在 <rpc/rpc.h> 头文件中

1.2 演示示例

1.2.1 accepted_reply

struct accepted_reply {
    enum accept_stat ar_stat;  /* status code */
    union {
        struct {
            uint32_t low;     /* lower half of range */
            uint32_t high;    /* upper half of range */
        } ar_vers;            /* new program version */
        caddr_t ar_results;   /* pointer to results */
        auth_stat ar_why;     /* why the call was rejected */
    } ar_u;                   /* union of results */
};

1.2.2 Test.c

#include <stdio.h>
#include <rpc/rpc.h>

int main() 
{
    XDR xdrs;
    char buffer[1024];
    enum accept_stat status = RPC_SUCCESS;

    // Encode an accepted_reply structure.
    struct accepted_reply ar = {0};
    ar.ar_stat = status;
    xdrmem_create(&xdrs, buffer, sizeof(buffer), XDR_ENCODE);
    if (!xdr_accepted_reply(&xdrs, &ar)) 
    {
        printf("Failed to encode data.\n");
        return 1;
    }
    xdr_destroy(&xdrs);

    // Decode the encoded data.
    struct accepted_reply ar2 = {0};
    xdrmem_create(&xdrs, buffer, sizeof(buffer), XDR_DECODE);
    if (!xdr_accepted_reply(&xdrs, &ar2)) 
    {
        printf("Failed to decode data.\n");
        return 1;
    }
    xdr_destroy(&xdrs);

    printf("Encoded and decoded data successfully.\n");
    return 0;
}

在上面的示例代码中,

  • 首先,我们定义了一个长度为 1024 的字符数组 buffer,用于存储编码后的数据;定义枚举变量 status ,初始化为 RPC_SUCCESS;定义了一个 accepted_reply 结构体,并将其成员变量 ar_stat 赋值为status
  • 然后,调用 xdrmem_create() 函数,创建了一个 XDR 流对象 xdrs,并将其与 buffer 绑定;
  • 接着,调用 xdr_accepted_reply() 函数将结构体编码为 XDR 格式,并将其存储在内存缓冲区 buffer 中;编码完成后,调用 xdr_destroy() 函数清理流对象 xdrs
  • 再然后,定义了结构体 accepted_reply 类型的变量 ar2,并再次调用 xdrmem_create() 函数创建了一个新的 XDR 流对象 xdrs2,并将其与 buffer 绑定
  • 最后,我们使用 xdr_accepted_reply() 函数从缓冲区中解码编码后的数据,并将其存储在另一个 accepted_reply 结构体 ar2 中;解码完成后,调用xdr_destroy() 函数清理流对象 xdrs2

注意:在调用 xdr_accepted_reply() 时,

  • 如果需要编码 accepted_reply 结构体,则应将 ar 参数设置为一个已填充的结构体,将 XDR_ENCODE 标志传递给 xdr_accepted_reply() 函数。该函数将会对结构体进行编码,并在 XDR 数据流中存储编码后的结果。
  • 如果要解码 accepted_reply 结构体,则应将 ar 参数设置为一个未初始化的结构体,将 XDR_DECODE 标志传递给 xdr_accepted_reply() 函数。该函数将会从 XDR 数据流中读取数据,并将其解码到 ar 结构体中。

2. xdr_array

2.1 函数说明

函数声明 函数功能
bool_t xdr_array(XDR *xdrs, char **addrp, u_int *sizep, u_int maxsize, u_int elsize, xdrproc_t elproc); 用于编解码数组类型的数据

参数:

  • xdrs : 指向XDR流对象的指针
  • addrp : 指向数组地址的指针
  • sizep : 指向数组元素个数的指针
  • maxsize : 数组的最大容量
  • elsize : 每个数组元素的大小
  • elproc : 指向编解码数组元素的函数指针

xdr_array() 函数会将数组中的元素按照 elsize 的大小进行编解码,并根据 maxsizesizep 来确定数组的长度。

  • 在编码时,addrp 指向的数组数据会被写入到 XDR 流对象xdrs所代表的缓冲区中。
  • 在解码时,从 XDR 流对象 xdrs 所代表的缓冲区中读取数据,并将其存储到 addrp 指向的数组中,同时 sizep 会被设置为实际的数组元素个数。

注意: 在使用 xdr_array() 函数编解码数组时,数组的大小必须小于等于 maxsize,并且 sizep 必须始终指向数组实际的元素个数。此外,elproc 指向的编解码函数也必须正确地实现对应数据类型的编解码操作。

2.2 演示示例

#include <stdio.h>
#include <rpc/xdr.h>

#define MAX_SIZE 10

int main() 
{
    int arr[MAX_SIZE] = {1, 2, 3, 4, 5};
    int size = 5;
    char buffer[1024];
    XDR xdrs;

    // Encode the array data.
    xdrmem_create(&xdrs, buffer, sizeof(buffer), XDR_ENCODE);
    if (!xdr_array(&xdrs, (char **)&arr, &size, MAX_SIZE, sizeof(int), (xdrproc_t)xdr_int)) 
    {
        printf("Failed to encode data.\n");
        return 1;
    }
    xdr_destroy(&xdrs);

    // Decode the encoded data.
    xdrmem_create(&xdrs, buffer, sizeof(buffer), XDR_DECODE);
    if (!xdr_array(&xdrs, (char **)&arr, &size, MAX_SIZE, sizeof(int), (xdrproc_t)xdr_int)) 
    {
        printf("Failed to decode data.\n");
        return 1;
    }
    xdr_destroy(&xdrs);

    // Print the decoded array data.
    for (int i = 0; i < size; i++) 
    {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

在上面的这个示例中,

  • 首先,我们定义了一个大小为 MAX_SIZEint 类型数组 arr,并初始化其前 5 个元素为 1、2、3、4 和 5;定义了int 类型变量 size,并将其赋值为 5,表示数组中实际的元素个数。
  • 接着,定义了一个大小为 1024 的字符数组 buffer,并创建一个 XDR 流对象 xdrs,并将其与 buffer 绑定。
  • 然后,调用 xdr_array() 函数,将 arr 数组中的数据按照 int 类型进行编码,并写入到 xdrs 所代表的缓冲区中;编码完成后,调用 xdr_destroy() 函数清理流对象 xdrs
  • 再接着,创建了一个新的 XDR 流对象 xdrs,并将其与 buffer 绑定。
  • 再然后,再次调用 xdr_array() 函数,将 xdrs 所代表的缓冲区中的数据解码成 int 类型的数组并保存到 arr 中,同时将实际的数组元素个数存储在 size 变量中;解码完成后,调用 xdr_destroy() 函数清理流对象 xdrs
  • 最后,使用 for 循环遍历 arr 数组,并输出其所有元素的值。如果编解码成功,则输出 1、2、3、4 和 5

3. xdr_authunix_parms

3.1 函数说明

函数声明 函数功能
bool_t xdr_authunix_parms(XDR *xdrs, struct authunix_parms *objp); 用于编解码Unix身份验证信息

参数:

  • xdrs : 指向 XDR 流对象的指针
  • objp : 指向 authunix_parms 结构体的指针

关于 xdr_authunix_parms() 函数,

  • 在编码时,xdr_authunix_parms() 函数会将 authunix_parms 结构体中的 credverf 字段按照规定的格式进行编码,并将编码后的数据写入到 XDR 流对象 xdrs 所代表的缓冲区中。
  • 在解码时,xdr_authunix_parms() 函数会从 XDR 流对象 xdrs 所代表的缓冲区中读取数据,并将其存储到 authunix_parms 结构体中。

3.2 演示示例

#include <stdio.h>
#include <rpc/xdr.h>

int main() 
{
    char buffer[1024];
    XDR xdrs;
    struct authunix_parms auth = {1234, 5678, NULL, 0};

    // Encode the auth data.
    xdrmem_create(&xdrs, buffer, sizeof(buffer), XDR_ENCODE);
    if (!xdr_authunix_parms(&xdrs, &auth)) 
    {
        printf("Failed to encode data.\n");
        return 1;
    }
    xdr_destroy(&xdrs);

    // Decode the encoded data.
    xdrmem_create(&xdrs, buffer, sizeof(buffer), XDR_DECODE);
    struct authunix_parms auth2 = {0};
    if (!xdr_authunix_parms(&xdrs, &auth2)) 
    {
        printf("Failed to decode data.\n");
        return 1;
    }
    xdr_destroy(&xdrs);

    // Print the decoded auth data.
    printf("uid: %d\ngid: %d\n", auth2.aup_uid, auth2.aup_gid);
    for (int i = 0; i < auth2.aup_len; i++) 
    {
        printf("gid[%d]: %d\n", i, auth2.aup_gids[i]);
    }

    return 0;
}

在上面的示例代码中,

  • 首先,我们定义了一个大小为 1024 的字符数组 buffer,并创建一个 XDR 流对象 xdrs,并将其与 buffer 绑定;
  • 接着,定义了一个 authunix_parms 结构体变量 auth,并初始化了其中的 uidgid 字段。由于 附属组 ID 为空,因此将指向 gids 数组的指针设置为 NULLaup_len 字段设置为 0
  • 然后,调用 xdr_authunix_parms() 函数,将 auth 结构体中的数据按照规定的格式进行编码,并写入到 xdrs 所代表的缓冲区中;编码完成后,调用 xdr_destroy() 函数清理流对象 xdrs
  • 再接着,创建一个新的 XDR 流对象 xdrs,并将其与 buffer 绑定;
  • 再然后,再次调用 xdr_authunix_parms() 函数,将 xdrs 所代表的缓冲区中的数据解码成 authunix_parms 结构体并保存到 auth2 中;解码完成后,调用 xdr_destroy() 函数清理流对象 xdrs
  • 最后,使用 printf 函数输出 auth2 中的 uidgid附属组ID 等信息。

4. xdr_bool

4.1 函数说明

函数声明 函数功能
bool_t xdr_bool(XDR *xdrs, bool_t *bp); 用于编解码布尔类型的数据

参数:

  • xdrs : 指向XDR流对象的指针
  • bp : 指向bool_t类型变量的指针,表示要编解码的布尔值

4.2 演示示例

#include <stdio.h>
#include <rpc/xdr.h>

int main() 
{
    // 创建 XDR 流
    XDR xdr;
    xdrmem_create(&xdr, NULL, 0, XDR_ENCODE); 

    // 写入布尔值
    bool b = true;
    if (!xdr_bool(&xdr, &b)) 
    {
        printf("写入失败");
        return 1;
    }

    // 重置 XDR 流为解码模式
    xdrrec_endofrecord(&xdr, true);

    // 从流中读取布尔值
    bool result;
    if (!xdr_bool(&xdr, &result)) 
    {
        printf("读取失败");
        return 1;
    }

    // 输出结果
    printf("读取结果:%d\n", result);
    return 0;
}

在上面的这个示例程序中,

  • 首先,我们调用 xdrmem_create() 函数创建了一个 XDR 流;
  • 然后,使用 xdr_bool() 函数将 true 布尔值写入流中;
  • 接着,调用 xdrrec_endofrecord() 函数将流重置为解码模式;
  • 再接着,使用 xdr_bool() 函数从流中读取布尔值;
  • 最后,调用 printf() 函数输出从流中读取的布尔值。

5. xdr_bytes

5.1 函数说明

函数声明 函数功能
bool_t xdr_bytes(XDR *xdrs, char **cpp, u_int *sizep, u_int maxsize); 用于 XDR(外部数据表示)编程的数据类型,它可以将任意二进制数据转换为字节数组,并在 XDR 流中进行传输

参数:

  • xdrs : 指向要编码或解码数据的 XDR 结构体的指针
  • cpp : 指向将要编码或解码的数据的字符指针的指针。在编码时,cpp 是一个输入参数,指向要编码的数据;在解码时,cpp 是一个输出参数,指向存储已解码数据的缓冲区
  • sizep : 指向将要编码或解码的数据大小的无符号整数指针。在编码时,sizep 是一个输入参数,指示要编码的数据大小;在解码时,sizep 是一个输出参数,指示已解码数据的大小。
  • maxsize : 指定数据的最大大小。如果实际大小超过此值,则会发生错误

在计算机网络和分布式系统中,XDR 通常用于在不同的计算机之间传递数据。可以实现如下的功能:

  • 将任意二进制数据转换为字节数组:xdr_bytes() 函数可以将一个二进制数据块转换为字节数组。这个数据块可以是任何类型的数据,例如整数、字符串、结构体等。
  • XDR 流中进行传输:它可以将转换后的字节数组写入 XDR 流中,以便在不同的计算机之间进行传输。在传输过程中,字节数组会被打包到 XDR 数据包中,并添加一些元数据来描述数据的类型和长度等信息。
  • XDR 流中读取字节数组:它还可以从 XDR 流中读取字节数组,并将其转换回原始的二进制数据块。这个过程与写入过程相反,即从 XDR 数据包中解包出字节数组,并将其转换为原始的数据类型。

5.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <rpc/xdr.h>

int main() 
{
    // 创建 XDR 流
    XDR xdr;
    xdrmem_create(&xdr, NULL, 0, XDR_ENCODE); 

    // 写入字节数组
    char* data = "Hello, world!";
    int length = strlen(data);
    if (!xdr_bytes(&xdr, (char **)&data, &length, 100)) 
    {
        printf("写入失败");
        return 1;
    }

    // 重置 XDR 流为解码模式
    xdrrec_endofrecord(&xdr, true);

    // 从流中读取字节数组
    char* result = NULL;
    int result_length;
    if (!xdr_bytes(&xdr, (char **)&result, &result_length, 100)) 
    {
        printf("读取失败");
        return 1;
    }

    // 输出结果
    printf("读取结果:%s\n", result);

    // 释放内存
    free(result);

    return 0;
}

知识拓展

XDR(External Data Representation) 是一种用于表示数据的格式,它独立于特定的计算机体系结构和编程语言。XDR 最初由 Sun 公司开发,旨在解决分布式系统中不同计算机之间通信的问题,它可以将数据从一台计算机转换为另一台计算机可以理解的格式。

XDR 定义了一组规则和约定,用于将常见数据类型(例如整数、浮点数、字符串等)以及自定义数据类型(例如结构体、联合体等)转换为一个统一的二进制格式,并在网络上传输。

这个二进制格式具有以下特点:

  • 独立于任何特定的计算机体系结构和编程语言;
  • 严格定义了数据类型的大小和对齐方式;
  • 可以通过标准的网络协议进行传输

使用 XDR,不同计算机之间可以轻松地共享数据,而无需考虑它们的硬件平台或编程语言。因此,XDR 在许多分布式系统中得到广泛应用,例如 RPC远程过程调用)、NFS网络文件系统)等。

当然,在实际的应用中,XDR 已经被其他更先进的技术所取代,例如 XMLJSON 等。但是,作为一种经典的数据表示格式,XDR 仍然具有一定的历史地位和实用价值。

参考

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

C语言函数大全-- x 开头的函数(1) 的相关文章

  • C语言函数大全-- w 开头的函数(1)

    w 开头的函数 1 1 wcscat 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 wcschr 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 wcscmp 3 1 函数说明 3 2 演示示例 3 3 运行结果 4
  • 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语言函数大全-- 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语言函数大全-- x 开头的函数(5)

    x 开头的函数 5 1 xdrmem create 1 1 函数说明 1 2 演示示例 2 xdrmem destroy 2 1 函数说明 2 2 演示示例 3 xdrrec create 3 1 函数说明 3 2 演示示例 4 xdrre
  • 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语言函数大全--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语言函数大全-- s 开头的函数(4)

    s 开头的函数 4 1 strdup 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 stricmp 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 strerror 3 1 函数说明 3 2 演示示例 3 3 运行结果
  • 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

随机推荐

  • Python操作mongodb数据库详解

    数据库的分类 数据库可以简单的分为 MySQL 和 NOSQL 两类 这里的 NOSQL 不是 NO SQL 的意思 他的意思是 Not Only MySQL MySQL与NoSQL之间的区别 1 MySQL是一个基于表格设计的关系数据库
  • 线性代数学习笔记——第七十一讲——正交矩阵

    1 正交矩阵引例 2 正交矩阵的定义 3 正交矩阵的充要条件是其行 列 向量组都是规范正交向量组 4 正交矩阵判定示例 5 正交矩阵的应用示例1 6 正交矩阵的应用示例2
  • 【MacOS】SSH 设置别名+免密登录

    设置别名 首先 进入ssh的config文件 vim ssh config 按I写入 Host my name User zmq HostName 1xx xx xx xxx Port 22 输入 x保存退出 设置别名成功 可以直接 ssh
  • 朴素贝叶斯算法_朴素贝叶斯算法介绍(补充)

    朴素贝叶斯是基于贝叶斯决策理论和特征属性独立假设的生成方法 朴素贝叶斯中的朴素是指特征条件独立假设 贝叶斯定理是用来描述两个条件概率之间的关系 上一篇有做一些介绍 朴素贝叶斯算法介绍 这次做一些补充 1 贝叶斯原理 先验概率 通过经验来判断
  • log4net使用

    说明 本程序演示如何利用log4net记录程序日志信息 log4net是一个功能著名的开源日志记录组件 利用log4net可以方便地将日志信息记录到文件 控制台 Windows事件日志和数据库 包括MS SQL Server Access
  • 2023年全国职业院校技能大赛-高职组“区块链技术应用”赛项赛卷(1卷)

    目录 模块一 区块链产品方案设计及系统运维 35分 任务1 1 区块链产品需求分析与方案设计 区块链食品溯源系统概要设计说明书 1 引言 1 1编写目的 2 总体设计 2 1需求规定 2 1 2输入输出要求 2 2运行环境 2 2 1支持架
  • 30-Docker-常用命令详解-docker cp

    Docker 常用命令详解 docker cp 前言 docker cp 语法格式 options说明 SRC PATH 和 DEST PATH 说明 使用示例 从容器复制文件到主机 从主机复制目录到容器 前言 本篇来学习docker cp
  • SpringBoot自动配置原理

    自动装配简单来说就是自动把第三方组件的bean装载到IOC容器里面 不需要开发人员再去写bean相关的配置 在springboot应用里面只需要在启动类中加上 springbootapplication注解就可以实现自动注解配置 他是一个复
  • uni-app开发小程序无需https接口即可上线

    云函数的使用 使用uniCloud创建云函数 具体使用见官方说明https uniapp dcloud io uniCloud quickstart 调用方法 在开通云函数的时候 uni官方给出两种方案 一种腾讯云 基本与微信小程序的云开发
  • 使用Java定时执行shell脚本

    执行shell脚本 Runtime getRuntime exec 可以直接执行部分命令 不过执行一个shell脚本的话更方便修改 public static void runshell String path try String get
  • python基础(第四章)函数+对象方法(下)

    对象方法 1 对象的方法 这个对象类型在标准库里面就有的方法 2 对象的方法调用 对象 方法 3 字符串 str 1 count 计算字符串中包含的多少个指定的子字符串 str1 abcaaa str1 count a 结果 4 2 end
  • C++ ROS串口通信serial库使用

    来源是使用UWB开发板时 希望能够ubuntu中通过ros话题的方式获得UWB测距信息 开发板通过串口接收AT指令 来进行控制 发送也通过串口 给大家一个参考 使用的是安信可的NodeMCU BU01开发板 修改了固件源码 提升频率为10h
  • ValueError: invalid literal for int() with base 10: ‘cuda:0‘

    detectron2 转onnx时出现的问题 升级torch就好了
  • 大模型微调之P-tuning方法解析

    转载 原文链接 大模型微调之P tuning方法解析 Part1前言 Bert时代 我们常做预训练模型微调 Fine tuning 即根据不同下游任务 引入各种辅助任务loss和垂直领域数据 将其添加到预训练模型中 以便让模型更加适配下游任
  • 【C++】: 隐式构造函数和显示构造函数的实验和讨论

    1 先放一段实验代码及编译结果 include
  • Node.js之文件及文件流(fs,path,buffer,stream)

    文件操作 1 文件模块fs fs模块 操作文件 io node的特长 fs模块是node非常重要的模块 能体现出node的优势 fs readFile 读文件 fs writeFile 写文件 fs appendFile 在文件的内部去追加
  • Java集合Collection常用知识点归纳

    Java集合Collection常用知识点归纳 关系图解 一 常用集合分类 Collection List 接口 extends Collection lt E gt 元素按进入先后有序保存 可重复 单列集合 ArrayList 接口实现类
  • 铨顺宏智能RFID图书管理应用

    一 RFID图书管理应用背景 铨顺宏智能RFID图书档案管理应用 图书借还 快速盘点 查找 乱架图书整理等问题一直困扰着图书馆的管理及工作人员 铨顺宏通过图书馆的RFID系统建设 将简化读者的借阅流程 提高流通效率 大幅度降低图书清点和查找
  • pyecharts图表库学习:Bar(柱状图/条形图)、Bar3D(3D 柱状图)

    柱状 条形图 通过柱形的高度 条形的宽度来表现数据的大小 Bar add 方法签名 add name x axis y axis is stack False bar category gap 20 kwargs name gt str 图
  • 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