能定時主動的檢查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...