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