【问题标题】:read and write scsi devices file from linux , like sdb,sdc从 linux 读取和写入 scsi 设备文件,如 sdb,sdc
【发布时间】:2017-08-22 07:58:07
【问题描述】:

我想在 Linux 上的设备文件(scsi 文件 sdb、sdc...)上写我自己的标签。

我在 /dev/sdb 文件上使用 linux C open()read()write() 函数,将我的密钥写入此文件。但是当U盘设备从电脑上拔下来再插上时,在/dev/sdb的key中,有时会消失,或者不稳定。

我不知道为什么。

char readBuf[512] = { 0 }; 
char key[12] = "h%27dcd*()jd"; 
int fd = open("/dev/sdb",O_RDWR); 
lseek(fd,1024,SEEK_SET); 
read(fd,readBuf,512); 
for(int i=0; i<sizeof key; ++i) 
{ 
    readBuf[i] = ~key[i]; 
} 
lseek(fd,1024,SEEK_SET); 
write(fd,readBuf,512);
//In order to mark the Usb disk bear fruit... 

【问题讨论】:

  • 您应该准确地向我们展示您所做的事情以及发生的事情。公式:1)你做了什么? 2) 你预期会发生什么? 3) 究竟发生了什么?
  • 对不起..........我可能是这样... char readBuf[512] = { 0 };字符键[12] = "h%27dcd*()jd"; int fd = open("/dev/sdb",O_RDWR); lseek(fd,1024,SEEK_SET);读取(fd,readBuf,512); for(int i=0; i
  • 你应该把它放在问题中,这样更容易阅读。还要说明你是如何检查钥匙是否还在的。
  • 在拔下 USB 驱动器之前,您是否尝试过运行 sync

标签: c linux usb scsi


【解决方案1】:

用于设置固定挂载点:

您可以使用udev 规则和symlink 为USB 设备分配静态安装点(如/dev/sdb)。您可以通过即 vendor idproduct id,...

来识别 udev 规则中的设备

ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="my_device"

https://unix.stackexchange.com/questions/66901/how-to-bind-usb-device-under-a-static-name

用于逐位写入记忆棒上的特定内存位置:

要将数据按字节写入块设备上的任意块,请使用dd (https://en.wikipedia.org/wiki/Dd_(Unix)) 等工具。像read()write() 这样的文件 io 工具不能用于不使用文件的情况下按字节写入...

【讨论】:

  • (idVendor,idProduct) 这些我都得到了,我只想在/dev/sdb文件中写一些东西,但是当我使用open(),read(),write()函数时不稳定,像数据丢失............
  • 如果您有第二个 USB 大容量存储设备,请连接它并检查它是否也在此设备上。也许这是一个硬件错误(闪存芯片损坏,或 USB 端口物理连接,...)。您可以为此使用libusb,请参阅stackoverflow.com/questions/14772152/…,通常内核模块(usb_storage)负责此
  • 你的意思是我的方式(open,read(),write()) 没有错,也许这是硬件错误?我一直以为 (open(),read(),write) 是错的……
  • 内核模块(驱动程序)usb_storage 允许操作系统通过挂载它来将 USB 设备视为其文件系统 (/dev/sdbx) 的一部分。所以你应该能够使用标准文件系统操作,如open()read()write(),...所以如果你想用文件 io 命令写一些东西,你必须在驱动器上创建一个文件,你不能将h%27dcd*()jd写在你想要的USB记忆棒上的任何地方,因为块设备中有内存的内部结构(块大小,文件系统表,......)
  • 参见stackoverflow.com/questions/28532570/… 将数据按字节写入设备上的任意块,使用dd (en.wikipedia.org/wiki/Dd_(Unix))等工具
猜你喜欢
  • 1970-01-01
  • 2012-08-05
  • 2021-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多