1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Linux下U盘自动识别和挂载

Linux下U盘自动识别和挂载

时间:2024-06-19 09:45:12

相关推荐

Linux下U盘自动识别和挂载

这里提供一个Linux下U盘自动识别和挂载的程序,不是Shell脚本喔。

#define UEVENT_BUFFER_SIZE 2048#define NETLINK_KOBJECT_UEVENT 15int init_hotplug_sock(void){const int buffersize = 1024;int ret;int s;struct sockaddr_nl snl;bzero(&snl, sizeof(struct sockaddr_nl));snl.nl_family = AF_NETLINK;snl.nl_pid = getpid();snl.nl_groups = 1;s = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);if (s == -1) {perror("socket");return -1;}setsockopt(s, SOL_SOCKET, SO_RCVBUF, &buffersize,sizeof(buffersize));ret =bind(s, (struct sockaddr *) &snl, sizeof(struct sockaddr_nl));if (ret < 0) {perror("bind");close(s);return -1;}return s;}void split_udev(char *str){char action[50] = { 0 };char block[50] = { 0 };char tmp[50] = { 0 };char dname[50] = { 0 };char fname[50] = { 0 };sscanf(str, "%[a-z]@/%[a-z]/%[^/]/%[^/]", action, block, tmp,fname);if (!strcmp(action, "add")) {if (!strcmp(block, "block")) {if (strlen(fname) > 3) {char cmd[200];sprintf(dname, "/dev/%s", fname);sprintf(cmd, "mount -t vfat %s /mnt/usb",dname);printf("cmd = %s\n", cmd);sleep(2);system(cmd);}}g_usb_state = ADD_DEV;} else if (!strcmp(action, "remove")) {if (!strcmp(str, "remove@/devices/platform/at91_ohci/usb1/1-1")) {sleep(2);printf(" \n");system("umount /mnt/usb");printf("cmd = umount /mnt/usb\n");g_usb_state = REMOVE_DEV;}} else if (!strcmp(action, "mount")) {g_usb_state = MOUNT_DEV;} else if (!strcmp(action, "umount")) {g_usb_state = NO_DEV;}}// 监视USB状态线程void *usb_check(void *p){int hotplug_sock = init_hotplug_sock();char buf[UEVENT_BUFFER_SIZE * 2] = { 0 };g_usb_state = NO_DEV;while (1) {memset(buf, 0, UEVENT_BUFFER_SIZE * 2);recv(hotplug_sock, &buf, sizeof(buf), 0);printf("%s\n", buf);split_udev(buf);}pthread_detach(pthread_self());}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。