C++实现Linux下弹出U盘的方法
转载http://www.jb51.net/article/69806.htm
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <string.h>
#include <linux/fd.h>
#include <sys/mount.h>
#include <scsi/scsi.h>
#include <scsi/sg.h>
#include <scsi/scsi_ioctl.h>
int main(int argc, char *argv[])
{
int fd = -1;
char *device;
if (argc != 2)
{
printf("usage: usb-s /dev/sde1");
return -1;
}
device = strdup(argv[1]);
if ((fd = open(device, O_RDONLY|O_NONBLOCK)) < 0)
{
printf("open device %s failed!\n", device);
free(device);
return -1;
}
int status, k;
sg_io_hdr_t io_hdr;
unsigned char allowRmBlk[6] = {ALLOW_MEDIUM_REMOVAL, 0, 0, 0, 0, 0};
unsigned char startStop1Blk[6] = {START_STOP, 0, 0, 0, 1, 0};
unsigned char startStop2Blk[6] = {START_STOP, 0, 0, 0, 2, 0};
unsigned char inqBuff[2];
unsigned char sense_buffer[32];
if ((ioctl(fd, SG_GET_VERSION_NUM, &k) < 0) || (k < 30000)) {
printf("not an sg device, or old sg driver\n");
goto out;
}
memset(&io_hdr, 0, sizeof(sg_io_hdr_t));
io_hdr.interface_id = 'S';
io_hdr.cmd_len = 6;
io_hdr.mx_sb_len = sizeof(sense_buffer);
io_hdr.dxfer_direction = SG_DXFER_NONE;
io_hdr.dxfer_len = 0;
io_hdr.dxferp = inqBuff;
io_hdr.sbp = sense_buffer;
io_hdr.timeout = 10000;
io_hdr.cmdp = allowRmBlk;
status = ioctl(fd, SG_IO, (void *)&io_hdr);
if (status < 0)
{
goto out;
}
io_hdr.cmdp = startStop1Blk;
status = ioctl(fd, SG_IO, (void *)&io_hdr);
if (status < 0)
{
goto out;
}
io_hdr.cmdp = startStop2Blk;
status = ioctl(fd, SG_IO, (void *)&io_hdr);
if (status < 0)
{
goto out;
}
/* force kernel to reread partition table when new disc inserted */
status = ioctl(fd, BLKRRPART);
out:
close(fd);
free(device);
return 0;
}
运行
sudo usb-s /dev/sdb1
C++实现Linux下弹出U盘的方法相关推荐
- Linux下弹出U盘的代码
飞空静渡 在linux下,对于usb设备,我们一般都是mount上使用,不使用时umount掉就可以了. 在ubuntu10.04中,当我们插入u盘时,会出现u盘设备,当我点击这个设备就可以mount ...
- Linux下找出吃内存的方法总结
linux下查询进程占用的内存方法总结,假设现在有一个「php-cgi」的进程 ,进程id为「25282」.现在想要查询该进程占用的内存大小.linux命令行下有很多的工具进行查看,现总结常见的几种方 ...
- linux 光驱自动弹出,Linux下弹出和收回光驱
弹出光驱 #include #include #include #include #include #define DEVICE "/dev/cdrom" int fd = ope ...
- Linux下弹出CDROM的程序(参考网上程序)
本程序同时测试代码高亮. #include <stdio.h> #include <unistd.h> #include <linux/cdrom.h> #incl ...
- 如何解决,Windows 7 下弹出U盘那个图标点击了没反应
此方法适用于人群:在网上寻找答案.按照步骤操作后依然无效者:装有蓝牙模块用户 问题很简单,点击开始------>>>输入框输入"services.msc",找到& ...
- u盘盘符不显示 win10_学会这三招,在win10上安全弹出U盘,保证数据不损坏
为了避免数据丢失,用户必须掌握如何在使用完计算机后安全地从计算机上卸下外部硬盘驱动器或U盘,否则,如果在断开U盘之前未弹出它,则可能会遇到数据损坏的问题,所以不要偷懒.那么,如何在计算机上弹出外部硬盘 ...
- linux下制作windows启动盘,行家里手:Linux使用WoeUSB制作Windows启动盘
Linux 下制作启动 U 盘的工具实在是很多,要是不熟悉三个以上的启动盘制作工具,你都不好意思说你会折腾 Linux!虽是玩笑话,但是各类系统 ISO 结构不一,各类电脑引导方式也有区别,因此,Li ...
- Linux下给挂载U盘或者SD卡
Linux下给挂载U盘或者SD卡 mount -t vfat /dev/mmcblk0p2 /udisk 对于ARMLinux来说,第一次使用U盘时,U盘这个文件目录是不能直接进入的,我们需要对其进行 ...
- php能弹出u盘吗,拔掉U盘为什么要先弹出?知道真相的我眼泪掉下来
原标题:拔掉U盘为什么要先弹出?知道真相的我眼泪掉下来 在使用完U盘之后大部分朋友跟我一样子都会先确定弹出U盘然后才能拔出来,这个观念绝对是根深蒂固!因为就怕没弹出把U盘弄坏,但是弹出U盘在拔是因为保 ...
最新文章
- 微软支持BCH支付方式 曾三次暂停BTC支付
- 【若依(ruoyi)】部门查询SQL
- 使用Chronicle Wire将YAML连接到文件或网络
- [傅里叶变换及其应用学习笔记] 九. 继续卷积的讨论
- c语言学习-使用指针求一个字符串的长度
- 数据:以太坊矿工收入中的交易手续费占比达56%
- python接口自动化(三十三)-python自动发邮件总结及实例说明番外篇——下
- 5秒钟搭建一个简单版的restful资源服务器
- lvgl 主要文件目录树
- LintCode 快速幂
- zoj_2481 Unique Ascending Array
- 辛东方重组百花园传媒 人员大调整
- 【ROM制作工具】合并分割system.img和userdata.img文件修改教程
- office2016的word打开程序之后显示需要修复问题解决解决
- cad相贯展开图lisp_cad相贯线的画法
- 解:一阶齐次或非齐次线性微分方程-详细推导
- 深夜食堂|有些泡面说不出哪里好,但就是谁都代替不了
- Properties 工具类 和 ResourceBundle 工具类
- MD5工具类的代码实现和手动解密
- Mysql - 带条件计数(count)