如何使用C/C++中的磁带进行操作?

mat*_*age 0 c c++ linux data-storage

我需要在磁带服务器上使用磁带进行一些基本操作:

  • 装载磁带
  • 显示统计信息(相当于mt statLinux中的命令)
  • 在磁带块上读/写数据

我想通过C/C++中的API /库来执行这些任务,但我真的很难为初学者找到指令/教程.

你能以某种方式使用sg驱动程序,sg3_utils中的函数或者一些玩具ioctl()吗?

Bas*_*tch 5

磁带通常是字符设备(通常/dev/st*参见st(4) - 其中列出了相关的ioctl(2)参数 - 等等...).因此,使用公共读取(2)写入(2)系统调用(具有适当大小的缓冲区,例如128K字节).

您可以考虑使用libtar(以支持该tar格式).你肯定应该研究例如GNU tar(并 mt包含在其中)的源代码.

也许您的磁带服务器有自己的API,或某些Web界面(然后使用libcurl)或某些网络协议.

  • 至于磁带属性,倒带等,你可以使用[linux/mtio]中列出的[`ioctl()`](http://man7.org/linux/man-pages/man2/ioctl.2.html). h](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/mtio.h)头文件(在设备节点上).`mt-gnu`实用程序可能也很有趣; 它是[cpio](http://www.gnu.org/software/cpio/)包的一部分. (2认同)