如何读取/写入块设备?

如何读取/写入块设备? 我听说我像一个正常的文件读/写,所以我设置一个循环设备

sudo losetup /dev/loop4 ~/file 

然后我运行该应用程序的文件,然后循环设备

 sudo ./a.out file sudo ./a.out /dev/loop4 

该文件执行完美。 循环设备读取0个字节。 在这两种情况下,我得到FP == 3和closures== 0。 该文件正确获取string的长度和打印string,而循环让我0​​和打印什么都没有

如何读取/写入块设备?

 #include <fcntl.h> #include <cstdio> #include <unistd.h> int main(int argc, char *argv[]) { char str[1000]; if(argc<2){ printf("Error args\n"); return 0; } int fp = open(argv[1], O_RDONLY); printf("FP=%d\n", fp); if(fp<=0) { perror("Error opening file"); return(-1); } off_t off = lseek(fp, 0, SEEK_SET); ssize_t len = read(fp, str, sizeof str); str[len]=0; printf("%d, %d=%s\n", len, static_cast<int>(off), str); close(fp); } 

losetup似乎映射文件在512字节扇区。 如果文件大小不是512的倍数,则其余的将被截断。

当使用losetup将文件映射到/dev/loopX时,对于小于512字节的文件,会给出如下警告:

 Warning: file is smaller than 512 bytes; the loop device may be useless or invisible for system tools. 

对于大小不能被512除的文件:

 Warning: file does not fit into a 512-byte sector; the end of the file will be ignored 

这个警告是从util-linux ver 2.22开始的