2301_80229550 2024-11-25 09:44 采纳率: 100%
浏览 60
已采纳

seL4如何实现从终端输入数据

有人用过sel4微内核吗?感觉自己还不是很懂,怎么在这里面添加类似一个scanf的函数啊,用来从终端进行输入的那种。
我是在test里面进行修改的,按照server_serial_printf函数进行修改的,如下,但是报错,显示没有用?

img

ssize_t serial_server_scanf(serial_client_context_t *conn, const char *fmt, ...)
{
    ssize_t read_length;
    va_list args;
    char *buf = NULL;
    size_t buf_size = 0;

    // 参数有效性检查
    if (fmt == NULL || conn == NULL || conn->shmem == NULL) {
        ZF_LOGE(SERSERVC"scanf: NULL passed for required arguments.\n"
                "\tIs connection handle valid?");
        return -seL4_InvalidArgument;
    }

    // 确保共享内存缓冲区足够大
    buf = (char *)conn->shmem;
    buf_size = conn->shmem_size;

    // 从终端读取数据到缓冲区
    if (fgets(buf, buf_size, stdin) == NULL) {
        ZF_LOGE(SERSERVC"scanf: Failed to read data from terminal.");
        return -1;
    }

    // 获取实际读取的数据长度
    read_length = strlen(buf);

    // 去除末尾的换行符(如果有)
    if (read_length > 0 && buf[read_length - 1] == '\n') {
        buf[read_length - 1] = '\0';
        read_length--;
    }

    // 初始化可变参数列表
    va_start(args, fmt);

    // 使用 sscanf 解析数据
    ssize_t parsed_count = vsscanf(buf, fmt, args);

    // 清理可变参数列表
    va_end(args);

    return parsed_count;
}

img

展开全部

  • 写回答

34条回答 默认 最新

  • 2401_84947754 2024-11-26 10:38
    关注

    test只是一个客户端,获取串口设备和串口读写都在server中,将读取操作代码写在server中,然后test中用ipc通信方式通知server去读数据,然后将读到的数据返回给test

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(33条)
编辑
预览

报告相同问题?

问题事件

  • 已采纳回答 12月1日
  • 创建了问题 11月25日

悬赏问题

  • ¥15 加热反应炉PLC控制系统设计(相关搜索:梯形图)
  • ¥15 python 用Dorc包报错,我的写法和网上教的是一样的但是它显示无效参数,是什么问题
  • ¥15 指定IP电脑的访问设置
  • ¥30 matlab ode45 未发现警告,但是运行出错
  • ¥15 vscode platformio
  • ¥15 代写uni代码,app唤醒
  • ¥15 全志t113i启动qt应用程序提示internal error
  • ¥15 ensp可以看看嘛.
  • ¥80 51单片机C语言代码解决单片机为AT89C52是清翔单片机
  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部