转载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;
}

运行

g++ -g -Wall main.cpp -o usb-s

sudo usb-s /dev/sdb1

C++实现Linux下弹出U盘的方法相关推荐

  1. Linux下弹出U盘的代码

    飞空静渡 在linux下,对于usb设备,我们一般都是mount上使用,不使用时umount掉就可以了. 在ubuntu10.04中,当我们插入u盘时,会出现u盘设备,当我点击这个设备就可以mount ...

  2. Linux下找出吃内存的方法总结

    linux下查询进程占用的内存方法总结,假设现在有一个「php-cgi」的进程 ,进程id为「25282」.现在想要查询该进程占用的内存大小.linux命令行下有很多的工具进行查看,现总结常见的几种方 ...

  3. linux 光驱自动弹出,Linux下弹出和收回光驱

    弹出光驱 #include #include #include #include #include #define DEVICE "/dev/cdrom" int fd = ope ...

  4. Linux下弹出CDROM的程序(参考网上程序)

    本程序同时测试代码高亮. #include <stdio.h> #include <unistd.h> #include <linux/cdrom.h> #incl ...

  5. 如何解决,Windows 7 下弹出U盘那个图标点击了没反应

    此方法适用于人群:在网上寻找答案.按照步骤操作后依然无效者:装有蓝牙模块用户 问题很简单,点击开始------>>>输入框输入"services.msc",找到& ...

  6. u盘盘符不显示 win10_学会这三招,在win10上安全弹出U盘,保证数据不损坏

    为了避免数据丢失,用户必须掌握如何在使用完计算机后安全地从计算机上卸下外部硬盘驱动器或U盘,否则,如果在断开U盘之前未弹出它,则可能会遇到数据损坏的问题,所以不要偷懒.那么,如何在计算机上弹出外部硬盘 ...

  7. linux下制作windows启动盘,行家里手:Linux使用WoeUSB制作Windows启动盘

    Linux 下制作启动 U 盘的工具实在是很多,要是不熟悉三个以上的启动盘制作工具,你都不好意思说你会折腾 Linux!虽是玩笑话,但是各类系统 ISO 结构不一,各类电脑引导方式也有区别,因此,Li ...

  8. Linux下给挂载U盘或者SD卡

    Linux下给挂载U盘或者SD卡 mount -t vfat /dev/mmcblk0p2 /udisk 对于ARMLinux来说,第一次使用U盘时,U盘这个文件目录是不能直接进入的,我们需要对其进行 ...

  9. php能弹出u盘吗,拔掉U盘为什么要先弹出?知道真相的我眼泪掉下来

    原标题:拔掉U盘为什么要先弹出?知道真相的我眼泪掉下来 在使用完U盘之后大部分朋友跟我一样子都会先确定弹出U盘然后才能拔出来,这个观念绝对是根深蒂固!因为就怕没弹出把U盘弄坏,但是弹出U盘在拔是因为保 ...

最新文章

  1. 微软支持BCH支付方式 曾三次暂停BTC支付
  2. 【若依(ruoyi)】部门查询SQL
  3. 使用Chronicle Wire将YAML连接到文件或网络
  4. [傅里叶变换及其应用学习笔记] 九. 继续卷积的讨论
  5. c语言学习-使用指针求一个字符串的长度
  6. 数据:以太坊矿工收入中的交易手续费占比达56%
  7. python接口自动化(三十三)-python自动发邮件总结及实例说明番外篇——下
  8. 5秒钟搭建一个简单版的restful资源服务器
  9. lvgl 主要文件目录树
  10. LintCode 快速幂
  11. zoj_2481 Unique Ascending Array
  12. 辛东方重组百花园传媒 人员大调整
  13. 【ROM制作工具】合并分割system.img和userdata.img文件修改教程
  14. office2016的word打开程序之后显示需要修复问题解决解决
  15. cad相贯展开图lisp_cad相贯线的画法
  16. 解:一阶齐次或非齐次线性微分方程-详细推导
  17. 深夜食堂|有些泡面说不出哪里好,但就是谁都代替不了
  18. Properties 工具类 和 ResourceBundle 工具类
  19. MD5工具类的代码实现和手动解密
  20. Mysql - 带条件计数(count)

热门文章

  1. 字节跳动涉代码抄袭被诉陪22.74亿,连错误的函数都搬?
  2. 每日一皮:公鸡说,你不会下蛋上去瞎扭啥嘛...
  3. 音效摸鱼还不够爽?试试IDE里打几盘魂斗罗?
  4. 500 行代码写一个俄罗斯方块游戏
  5. 程序员的小天地:注释中的快乐
  6. 在家办公的第一天,钉钉、企业微信集体“崩溃”...
  7. 重磅剧透!阿里巴巴计划开源 Nacos,为Dubbo生态发展铺路
  8. UML之交互图(协作图和顺序图)
  9. python sqlalchemy操作SQLite
  10. pytorch筛选统计