linux 下C語言掛載U盤

2021-06-20 10:46:19 字數 3942 閱讀 8229

能定時主動的檢查u盤 行動硬碟 usb光碟機 除光碟機外能實現自動mount到指定的路徑

對於u盤能區分有分割槽表的和沒有分割槽表

光碟機提供了兩個函式mount 和umount,並能檢測vcd和cd 並使用cdfs格式進行mount。

對於分割槽格式的支援要看大家核心的支援情況具體修改**

下面**僅僅支援fat32的。

#include #include #include #include #include #include #include #include #include #include //setmsg

extern void set_alert_msg(char * buf);

#define file_dev_check "/proc/scsi/scsi" //用來檢測裝置數和型別

#define file_mount_check "/proc/mounts" //用來檢測裝置是否被mount

#define file_disc_parts_check "/proc/partitions" //用來檢測裝置的分割槽情況

#define file_dev_statu_templ "/proc/scsi/usb-storage-%d/%d" //用來檢測某一裝置是否在插入狀態

#define file_dev_part_templ "/dev/scsi/host%d/bus0/target0/lun0/" //具體的裝置

#define usb_cdrom_mp "/tmp/cdrom"

#define usb_disk_mp "/tmp/usbdisk"

#define dbg_print(x) printf("[automounter]");printf x

#define dbg_print2(x) printf("[automounter]");printf x

#define max_name_len 64

#define max_part_num 6 //最多允許6個分割槽

typedef struct s_scsi_usb_dev

scsi_usb_dev;

static int is_manual_umount = 1;

static scsi_usb_dev * f_first_dev = null;

static int check_parts(scsi_usb_dev * dev);

static int add_dev(scsi_usb_dev * dev);

static int init_dev(scsi_usb_dev * dev, int index, char * type);

static void clear_dev(void);

static int find_device(void);

static int check_attach(scsi_usb_dev * dev);

static int check_mount(scsi_usb_dev * dev);

static int do_mount(scsi_usb_dev * dev);

static int do_umount(scsi_usb_dev * dev);

static int process_dev(scsi_usb_dev * dev);

static void * main_thread(void);

//device opt fuction

static int add_dev(scsi_usb_dev * dev)

else

return 1;

}static int init_dev(scsi_usb_dev * dev, int index, char * type)

else

return 1;

}static int check_parts(scsi_usb_dev * dev)}}

line = strtok_r(null, delim, &strtok_tmp_ptr);

}} }

else

return part_num;

}static void clear_dev(void)

f_first_dev = null;}//

static int find_device()}}

dbg_print(("dev_num = %d\n", dev_num));

} }else

return dev_num;

}static int check_attach(scsi_usb_dev * dev)

} }else

return 0;

}static int check_mount(scsi_usb_dev * dev)

} }else

return 0;

}static int do_mount(scsi_usb_dev * dev)

else

}} else

if (mount_ok == 0 || is_vcd)

else

}} else if (dev->type == 2)

else

}} else

return 1;

}static int do_umount(scsi_usb_dev * dev)

else

}else if(dev->type == 2)

else

}sprintf(tmpdir, usb_disk_mp"/disk%d", dev->index);

remove(tmpdir);

} return 1;

}static int process_dev(scsi_usb_dev * dev)

} else }

return 1;

}void manual_umount(void);

void manual_umount()//爭對光碟機進行umount

if (cur_dev != null)

} }}

void manual_mount(void);

void manual_mount()//爭對光碟機進行mount

if (cur_dev != null) }

}#ifndef dbg

int init_automounter(void);

int init_automounter()

return ret;

}static void * main_thread(void)

#else

int main()

#endif

sleep(10);//10秒鐘檢測一次

//對於u盤和行動硬碟定時檢測並自動mount和umount }}

/* attached devices:

host: scsi0 channel: 00 id: 00 lun: 00

vendor: benq model: ***-rom 16x rev: a.dd

type: cd-rom ansi scsi revision: 02

host: scsi1 channel: 00 id: 00 lun: 00

vendor: fujitsu model: mht2040ah rev: 0000

type: direct-access ansi scsi revision: 02

*///char ** usb_devs_statu= ;

///proc/scsi/usb-storage-1/1

///dev/scsi/host0/bus0/target0/lun0/cd

///dev/scsi/host1/bus0/target0/lun0/ disc part1 part2 part5

Linux下掛載U盤

一.linux掛載u盤 1 插入u盤到計算機,如果目前只插入了乙個u盤而且你的硬碟不是scsi的硬碟介面的話,那它的硬體名稱為 sda1。2 在mnt目錄下先建立乙個usb的目錄 如 root localhost root mkdir mnt usb 3 掛載u盤 mount t vfat dev ...

Linux下U盤掛載

一.linux掛載u盤 1 插入u盤到計算機,如果目前只插入了乙個u盤而且你的硬碟不是scsi的硬碟介面的話,那它的硬體名稱為 sda1。2 在mnt目錄下先建立乙個usb的目錄 如 root localhost root mkdir mnt usb 3 掛載u盤 mount t vfat dev ...

Linux下掛載U盤

掛載命令為 mount 第一步先檢索電腦上的磁碟 fdisk l sudo fdisk l會出現很多裝置資訊,找到與你u盤差不多的裝置型別 如果不知道自己u盤資訊,一般就選擇最底下的那個,因為列印出來的是按時間順序,如果你的u盤是剛剛插入,那麼一定在最底下。如我的就是 dev sde4 被linux...