问题标签 [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.
windows - 如何在 Windows 中使用 DeviceIoControl() 读取单个扇区/集群?
当 Windows 准备休眠时,我的笔记本电脑掉了下来,结果我的硬盘驱动器发生了头部碰撞。(教我下一次买一个带有自由落体传感器的硬盘和/或笔记本电脑。)无论如何,运行 SpinRite 来尝试恢复数据导致磁盘上的所有备用扇区都被全部用完。到目前为止可恢复的部门。SpinRite 现在仍在运行,但由于不再有备用扇区可供使用,我认为这将是徒劳的,除了告诉我所有坏扇区在哪里。
无论如何,我正计划编写一个应用程序来尝试从硬盘驱动器中抢救数据。从我过去对碎片整理的尝试中,我知道我可以使用 FSCTL_GET_RETRIEVAL_POINTERS 来找出任何给定文件的逻辑簇号。
我该如何尝试读取该实际集群的扇区?我在 MSDN 的磁盘、文件和卷设备控制代码列表中进行挖掘,并没有在我获得实际集群数据的过程中发现任何问题。
我不应该费心去读那么低的水平吗?我应该改为执行 SetFilePointer() 和 ReadFile() 调用以获取文件中适当的集群大小的偏移量并读取集群大小的块吗?
如果我要读取的文件有坏扇区,NTFS 会将整个文件标记为坏文件并阻止我以后访问该文件吗?如果是这样,我如何告诉 NTFS 不要将文件标记为坏或死?(请记住,HD 现在没有可以重新映射的备用扇区。)
我应该掸掉我的 *nix 知识并弄清楚如何从 /dev/ 读取吗?
更新:我找到了自己问题的答案。:-) 解决方案是在卷句柄上而不是在文件句柄上执行 SetFilePointer() 和 ReadFile()。
windows - 如何查找 NTFS 逻辑集群是否空闲?
我想编写一个程序来读取 NTFS 卷上所有未使用的集群。(我正在寻找从意外截断的文件中恢复数据)。
根据这个页面,我可以在卷句柄上调用 SetFilePointer() 和 ReadFile() 来遍历卷上的每个逻辑集群。但是我怎么知道文件正在使用哪些集群,哪些是免费的?
c# - 如何在 Windows 下直接访问 OPTICAL 块设备
问题类似于如何直接使用 .Net 读取磁盘?,但需要直接访问的驱动器是 CD-ROM 或 DVD-ROM 驱动器。这些驱动器不包括作为物理驱动器,并且无法使用上面主题中引用的DeviceStream类或CreateFile Win32 API 方法进行访问。
Windows 内核会自动为各种附加的块设备创建内部设备标记。第一个 CD-ROM 驱动器显示为\Device\CdRom0,尽管尝试通过CreateFile()打开它会失败(显然根据http://support.microsoft.com/kb/235128)。
考虑到非托管应用程序可以本地访问这些块设备(任何 CD 刻录软件、Windows 的 DD、Cygwin [通过 /dev/scdN]),是否有可用于访问这些块设备的编程方法(最好由 .NET 使用)?
python - python.select,将列表作为参数发送
r=select([f,s],[],[])[0][0].
这是否意味着等到 f AND s 指向的文件准备好读取或 f OR s 准备好读取?
port - PC中的LPT I/O地址映射
我听说过能够映射 PC 传统并行端口地址的 USB 到 LPT 适配器。这种映射的级别是多少?我的意思是 - 是否可以通过使用“输入”或“输出”x86 汇编程序指令(在 Windows 或 Linux 中)来访问适配器的引脚?如果不是,地址被映射是什么意思?这是什么模拟?谢谢。
马尔钦
c - 低级 CI/O:从一个文件读取并写入另一个文件时,我遇到了无限循环
我正在处理一项只允许使用低级 I/O(read()、write()、lseek())以及 perror() 的任务。
我已经能够以正确的权限打开 nessisary in 和 out 文件,但是当我输出时,我得到了 in 文件内容的无限循环。请参阅下面的片段...
我已经从我的代码中删除了一些错误捕获,您可以假设变量已初始化并且包含语句在那里。
c - 成功 open() 后,程序在 read() 上停止
几个小时以来,我一直把头撞在桌子上,试图弄清楚为什么下面的代码在while(chars = read(fd, buff, BUFF_SZ)) > 0)
. 紧随其后的printf
那一行没有被调用,而直接在上面的那一行是。文件描述符正在返回0
一个有效值。
我什至不知道如何调试它,因为在相关行之后没有触发任何内容,并且在此行之前一切看起来都很好。
完整的可编译代码:
encoding - 程序实际上是如何接收字符输入的?从扫描码到最终的原始输入位
所以,我的问题很简单:在用户“输入”(从物理键盘或任何其他方式)字符键之后,程序如何接收原始输入位?
我的意思是我知道字符编码在程序将其作为原始位接收后如何工作,但我不清楚该位序列最初是如何出现的。
我一直在阅读一些内容,但结果证明这对我的 Google-fu 来说是一个艰难的搜索。似乎操作系统从输入设备(通常是键盘)接收扫描代码,使用字符映射和键盘布局将其映射到编码,然后将生成的位序列传递给程序。我对吗?如果是这样,对我来说唯一缺少的部分是:
键盘布局如何定义扫描码对应的字符?使用 Unicode 代码点?操作系统特定的内部表?
其次,程序是否在编译时定义了它期望输入(来自操作系统)的字符编码?有吗?
arm - 使用 Qemu 进行 ARM 汇编
好吧,我已经在整个互联网上搜索了将使用 arm-linux-gnueabi-as 和 qemu 运行的代码。打印一个整数值。从字符串。例行公事会有所帮助。
c - 低级 I/O 是什么意思?我如何在这个程序中实现它?
我需要编写一个接受三个命令行参数的 C 程序:
- 输入文件一
- 输入文件二
- 输出文件名
程序需要从文件 1 和 2 中读取数据并将第一个文件和第二个文件连接起来,从而得到第三个文件。
这看起来应该很容易,但是分配的规定之一是只使用低级 I/O。
这到底是什么意思(低级 I/O)?