头都大了了 2021-12-12 00:55 采纳率: 85.7%
浏览 23
已结题

linux内核,输入输出问题

遇到了一段代码,目前我不能理解这段代码的作用,并且它好像也不能正常运行。
能不能帮我修一下bug。
方便的话简单分析一下这个代码的作用,原理!
谢谢,十分感谢。

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<sys/uio.h>

int main() {
    char love[12] = {0}, hello[13] = { 0 }, test[13] = { 0 };
    struct iovec iov[3];
    ssize_t nr;
    int fd, i;

    fd = open("vectest.txt", O_RDONLY);

    iov[0].iov_base = love;
    iov[0].iov_len = 12;
    iov[1].iov_base = hello;
    iov[1].iov_len = 13;
    iov[2].iov_base = test;
    iov[2].iov_len = sizeof(test);

    nr = readv(fd, iov, 3);

    for (i = 0; i < 3; i++) {
        printf("%d: %s\n", i, (char*)iov[i].iov_base);
    }

    return 0;
}
  • 写回答

1条回答 默认 最新

  • 我叫RT 2021-12-12 03:47
    关注

    struct iovec定义了一个向量元素。通常,这个结构用作一个多元素的数组。对于每一个传输的元素,指针成员iov_base指向一个缓冲区,这个缓冲区是存放的是readv所接收的数据或是writev将要发送的数据。成员iov_len在各种情况下分别确定了接收的最大长度以及实际写入的长度。

    可以参考这篇文章 https://www.cnblogs.com/zl1991/p/7268930.html

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月20日
  • 已采纳回答 12月12日
  • 创建了问题 12月12日

悬赏问题

  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系