问题标签 [low-level-io]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
92 浏览

c - 当输入长度超过 16 的字符串时,C 中的 `read` 会挂起程序

我制作了以下程序,该程序使用read(C 中的系统调用)从用户那里获取字符串(长度小于 100)。

我在这里期望的是,它会在用户输入换行符之前获取字符。然后它将用 替换该'\n'字符'\0',并打印它。

该程序运行良好,直到我在 中输入 15 个或更少的字符stdin,但当超过 16 个字符时停止工作。

我的输入如下:

为什么它只挂在16上?这个2^2有什么特别之处?后置脚本:我使用string.h只是为了获取字符串的长度。一旦我的程序开始运行良好,我将删除它。

0 投票
1 回答
752 浏览

c++ - 如何使用低级系统调用从标准输入和输入文件中获取字节数

如何使用低级系统调用从标准输入和输入文件中获取字节数?像读(2)和写(2)

我使用 lseek 从输入文件中获取字节数,但 lseek 无法使用标准输入。

我想尝试按字节读取文件或标准输入字节并将它们存储到数组中并打印出文件或标准输入中的总字节数。我尝试使用 for 循环来做到这一点。比如标准输入...

这是我试图做的,但我认为我使用 for 循环做错了。

我真的迷失了如何实现获取标准输入和输入文件中的字节数。有人能帮助我吗?

0 投票
1 回答
132 浏览

c - 在低级别写入文件

我正在在线阅读 GNU C PROGRAMMING TUTORIAL,并且对低级读写的代码示例感到有些困惑。

代码如下:

我用 gcc 编译代码没有问题。并且第一次运行,也是可以的。输出如下:

当我第二次运行程序时出现问题:

似乎代码第二次无法将字符串“1234567890”写入文件。正如我们从 GNU C 手册中知道的那样,O_RDWR | O_CREAT | O_TRUNC这些标志应该允许我们每次将文件截断为 0,然后写入文件。我不确定为什么第二次执行失败。

任何人都可以帮助我摆脱这种困惑吗?

0 投票
2 回答
77 浏览

c - 如何使用 read() 重新创建 recv()?

由于规范要求,我不允许使用 recv() 或类似函数从套接字的 fd 中读取。我想知道如何使用 read() 重新制作该函数?

我尝试使用以下代码创建它

此代码在一定程度上有效,但通常当发送者一个接一个地发送一条消息时,该函数会同时将这两条消息读取到同一个缓冲区(追加)。

0 投票
2 回答
2318 浏览

c - 为什么我必须使用 \x1b 而不是 \ 来表示转义字符

我读过它\x1b代表转义字符,但它'\'本身不是转义字符吗?一个教程要我写

清除屏幕。为什么不'\[2J'做作业?

0 投票
1 回答
152 浏览

c - 在遇到一定数量的换行符后,我的程序会返回我想要的正确位置吗?

我正在尝试向后读取文件(例如文件末尾的 10 行)。newline_counter每次读取'\n'时,我都会增加我的新行计数器( )。一旦newline_counter到达user_num(参数),比如 10 行,lseek()就会停在当前位置(current_pos)。我正在返回这个位置,以便我可以在另一个函数中使用这个位置,该函数使用lseek()这个位置并开始从这个位置读取并写入到文件末尾。我已经成功编译了程序,但是一旦我开始运行它,程序就一直在运行并且没有输出。

0 投票
1 回答
168 浏览

c - C Low level I/O : 为什么它会挂在 while 循环中?

我第一次学习 C 中的低级 I/O,我正在尝试编写一个向后打印文件的程序,但似乎这个 while 循环不起作用。为什么会这样?

0 投票
1 回答
931 浏览

linux-kernel - 如何在内核中高效地实现异步 I/O

这个问题是关于低级异步 I/O 系统调用,如 send + epoll/aio_read 等。我问的是网络 I/O 和磁盘 I/O。

实现这些异步调用的简单方法是为每个异步 I/O 请求创建一个线程,然后以同步方式执行请求。显然,这种幼稚的解决方案无法应对大量并行请求。即使使用了线程池,我们仍然需要为每个并行请求设置一个线程。

因此,我推测这是通过以下更有效的方式完成的:

对于写入/发送数据:

  • 将发送请求附加到一些内核内部的异步 I/O 队列。

  • 专用的“写入线程”以这样一种方式接收这些发送请求,从而充分利用目标硬件。为此,可能会使用特殊的 I/O 调度程序。

  • 根据目标硬件,写入请求最终会被分派,例如通过直接内存访问 (DMA)。

对于读取/接收数据:

  • 硬件引发一个 I/O 中断,该中断跳转到内核的 I/O 中断处理程序中。

  • 中断处理程序将通知附加到读取队列并快速返回。

  • 专用的“读取线程”接收读取队列的通知并执行两个任务:1) 如有必要,将读取的数据复制到目标缓冲区。2.) 必要时以某种方式通知目标进程(egepoll、signals、..)。

对于所有这一切,没有必要拥有比 CPU 内核数量更多的写入线程或读取线程。因此,并行请求可伸缩性问题将得到解决。

这是如何在真实的操作系统内核中实现的?这些猜测中哪些是正确的?

0 投票
3 回答
249 浏览

matlab - 如何仅使用低级 I/O 命令将 CSV 数据导入 Matlab

我真的很难弄清楚如何将包含 9 列和大约 400 行数据的 CSV 数据导入 Matlab 工作区中的表中。如果允许我使用 Matlab 必须提供的内置工具箱,这将很容易,但是,我需要尝试仅使用 fscanf、fopen 等命令来完成任务。数据本身是混合格式的每一列。十进制、浮点数、字符串等。我也被允许使用 CSVread,但我没有设法让它工作,因为据我了解 CSVread 仅适用于数值。

这是我的代码:

我已经使用 fgetl 跳过文件的标题行并将它们添加到自己的变量中,但是我不确定在创建表时从哪里开始。基本上我想在 Matlab 的工作区中实现一个 400 行 x 9 列的表。

以下是文本文件的几行示例:

我假设我将不得不使用某些单元格的内置转换函数,我可以这样做。为了获得正确的帮助,我可能错过了一些重要信息,但任何人的任何帮助都将不胜感激。谢谢你。

0 投票
2 回答
366 浏览

c - 将用read()读取的数据写入C中的int数组

我有一个每行都有数字的文件。我正在尝试使用 read() 函数将从文件中读取的数据写入 int 数组。我可以读取文件并将其打印到终端。我怎样才能得到我读入 arr 数组的数字?

这是我的代码