亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usb.c

?? 實現usb在S3C2410開發板的自動掛接
?? C
字號:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  	This procedure let us mount the usb device autoly////  	2008-8-13 ////	philip/////////////////////////////////////////////////////////////////////////#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <string.h>#include <sys/mount.h>#include <unistd.h>#include <pthread.h>#define USB_DISK_MP "/tmp/usbdisk"#define FILE_DEV_CHECK "/proc/scsi/scsi" //用來檢測設備數和類型#define FILE_DISC_PARTS_CHECK "/proc/partitions" //用來檢測設備的分區情況#define FILE_DEV_STATU_TEMPL "/proc/scsi/usb-storage-%d/%d"   //用來檢測某一設備是否在插入狀態#define FILE_MOUNT_CHECK "/proc/mounts" //用來檢測設備是否被mount#define MAX_NAME_LEN 64
#define MAX_PART_NUM 6   //最多允許6個分區typedef struct s_scsi_usb_dev
{
       int type; /*1 cdrom 2 disk */
       int index; /*like host0 host1*/
       char file_statu[MAX_NAME_LEN]; /*like "/proc/scsi/usb-storage-%d/%d"*/
       char devfile_parts[MAX_PART_NUM][MAX_NAME_LEN]; /*存儲每個分區的設備文件*/
       char mount_path[MAX_PART_NUM][MAX_NAME_LEN]; /*與上面對應的mount點*/
       int part_num; //分區數
       struct s_scsi_usb_dev * next_dev; //指向下一個備
} SCSI_USB_DEV;static SCSI_USB_DEV * f_first_dev = NULL;void CLEAR_DEV(void)
{

       SCSI_USB_DEV * cur_dev = f_first_dev;
       SCSI_USB_DEV * tmp_dev;
       while (cur_dev)
       {
              tmp_dev = cur_dev;
              cur_dev = cur_dev->next_dev;
              free(tmp_dev);
       }
       f_first_dev = NULL;
}int INIT_DEV(SCSI_USB_DEV * dev, int index, char * type)
{
       dev->index = index;
       sprintf(dev->file_statu, FILE_DEV_STATU_TEMPL, index, index);
       dev->type = 2;
       dev->part_num = CHECK_PARTS(dev);
       return 1;
}int CHECK_PARTS(SCSI_USB_DEV * dev)
{
       char buf[1024];
       char hoststr[16];
       int fd,len;
       int part_num = 0;
 
       char * line;
       char * delim="\n";
       char * strtok_tmp_ptr;
       char * seek;
       char * part_blocks;

       fd = open(FILE_DISC_PARTS_CHECK, O_RDONLY);
       if( fd > 0 )
       {
              len = read(fd, buf, sizeof(buf));
              close(fd);
              if (len > 0)
              {
                     sprintf(hoststr,"scsi/host%d", dev->index);
                     line = strtok_r(buf, delim, &strtok_tmp_ptr);
                     while(line)
                     {
                            seek = strstr(line, hoststr);
                            if (seek)
                            {
                                   part_blocks = seek - 3;
                                   if (strncmp(part_blocks, " 1 ", 3))
                                   {//not extend part
                                          sprintf(dev->devfile_parts[part_num],"/dev/%s", seek);
                                          sprintf(dev->mount_path[part_num], USB_DISK_MP"/disk%d/part%d",dev->index,part_num);					  printf("%s\n",dev->mount_path[part_num]);
                                          part_num ++;
                                          if (part_num == MAX_PART_NUM)
                                          {
                                                 break;//too many parts ignore 
                                          }
                                   }
                            }
                            line = strtok_r(NULL, delim, &strtok_tmp_ptr);
                     }
              }
       }
       else
       {
              printf("error ! can't find /proc/partitions files\n");
       }
       return part_num;
}int ADD_DEV(SCSI_USB_DEV * dev)
{
       if(f_first_dev)
       {
              dev->next_dev = f_first_dev;
              f_first_dev = dev;
       }
       else
       {
              f_first_dev = dev;
              dev->next_dev = NULL;
       }
       return 1;
}void find_device(){	char buf[1024];
       	int fd;
       	int len;
       	int dev_num = 0;
       	char * seek = NULL;
       	SCSI_USB_DEV * new_dev;
       	
       	CLEAR_DEV();
       	
       	fd = open(FILE_DEV_CHECK, O_RDONLY);	if(fd > 0)	{		len = read(fd, buf, sizeof(buf));
            	close(fd);
              	if ( len > 0 )
              	{
                     	seek = buf;
                     	while(seek)
                     	{
                            	seek = strstr(seek, "Host: scsi");
                            	if (seek)
                            	{
                                   	seek += strlen( "Host: scsi");
                                   	seek = strstr(seek, "Type:");
                                   	if (seek)
                                   	{
                                   	       seek += strlen("Type:");
                                   	       while(*seek == ' ') seek++;
                                   	       new_dev = malloc(sizeof(SCSI_USB_DEV));
                                   	       INIT_DEV(new_dev, dev_num, seek);
                                   	       ADD_DEV(new_dev);       
                                   	       dev_num ++;
                                   	}
                            	}
                     	}//while
                     printf("dev_num = %d\n", dev_num);
              }	}	else{		printf("error ! can't find /proc/scsi/scis file!\n");	}}int check_attach(SCSI_USB_DEV * dev)
{//檢測設備是否連接
//linux中只要設備被插入過就會記住該設備
//只能通過Attached來判斷是否連接 
       char buf[512];
       int fd;
       int len;
       char * seek;
       
       fd = open(dev->file_statu, O_RDONLY);
       if( fd > 0 )
       {
              len = read(fd, buf, sizeof(buf));
              close(fd);
              if ( len > 0 )
              {
                     seek = strstr(buf, "Attached:");
                     if (seek)
                     {
                            seek += strlen( "Attached:");
                            while(*seek == ' ') seek++;
                            return *seek=='Y';
                     }
              }
       }
       else
       {
              perror(dev->file_statu);
       }
       return 0;
}int do_mount(SCSI_USB_DEV * dev)
{
       int i = 0;
       char fstype[10];
       unsigned long mountflags=0;
       char mount_data[30];
       char tmpdir[50];
       

       if (dev->type == 2)
       {
              sprintf(tmpdir, USB_DISK_MP"/disk%d", dev->index);
              mkdir(tmpdir, 0777);
              
              strcpy(fstype, "vfat");
              mountflags= 0xc0ed0000;
              strcpy(mount_data,"codepage=936,iocharset=gb2312");
              
              if (dev->part_num > 1)
                     i ++; /*if disk ignore first part disc*/
              for(; i<dev->part_num; i++) /*if disk ignore first part disc*/
              {
                     mkdir(dev->mount_path[i], 0777);
                     if (mount(dev->devfile_parts[i], dev->mount_path[i], fstype ,mountflags, mount_data)== 0)
                     {
                            printf("mount %s %s success\n", dev->devfile_parts[i], dev->mount_path[i]);
                            //Do_USB_Disk_Update(dev->mount_path[i]);
                     }
                     else
                     {
                            rmdir(dev->mount_path[i]);
                            printf("mount %s %s failed\n", dev->devfile_parts[i], dev->mount_path[i]);
                     }
              }
       }
       else
       {
              return 0;
       }
       return 1;
}

static int do_umount(SCSI_USB_DEV * dev)
{
       int i = 0;
       char tmpdir[50];
 
       if(dev->type == 2) 
       {
              if (dev->part_num > 1)
                     i ++; /*if disk ignore first part disc*/
              for(; i<dev->part_num; i++)
              {
                     if (umount(dev->mount_path[i]) == 0)
                     {
                            printf("umount %s success\n", dev->devfile_parts[i]);
                            remove(dev->mount_path[i]);
                     }
                     else
                     {
                            printf("umount %s failed\n", dev->devfile_parts[i]);
                     }
              }
              sprintf(tmpdir, USB_DISK_MP"/disk%d", dev->index);
              remove(tmpdir);
       }
       return 1;
}



int check_mount(SCSI_USB_DEV * dev)
{
       char buf[1024];
       int fd;
       int len;
       char * seek;
       int i = 0;
       fd = open(FILE_MOUNT_CHECK, O_RDONLY);
       if( fd > 0 )
       {
              len = read(fd, buf, sizeof(buf));
              close(fd);
              if ( len > 0 )
              {
                     buf[len] = '\0';
                     if(dev->type == 2 && dev->part_num > 1) i ++; /*if disk ignore first part disc*/
                     for(; i<dev->part_num; i++)
                     {
                            seek = strstr(buf, dev->devfile_parts[i]);
                            if (seek!=NULL) return 1;/*have one part mounted return 1*/
                     }
              }
       }
       else
       {
              printf("error ! can't find /proc/mounts file!\n");
       }
       return 0;
}int process_dev(SCSI_USB_DEV * dev)
{
       if (check_attach(dev))//檢測設備是否插上
       {
              if (!check_mount(dev))//檢測設備是否mount上了
              {
                     do_mount(dev);
              }
       }
       else
       {
              if (check_mount(dev))
              {
                     do_umount(dev);
              }
       }
       return 1;
}int main(int argc , char **argv){	SCSI_USB_DEV * cur_dev = NULL;	mkdir(USB_DISK_MP, 0777);	while( 1 )	{		find_device();		cur_dev = f_first_dev;
              	while (cur_dev)
              	{
               	      process_dev(cur_dev);//對每個設備進行處理
               	      cur_dev = cur_dev->next_dev;
              	}		sleep(10);	}	return 0 ;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级在线视频| 欧美tickling网站挠脚心| 精品一区二区三区在线观看 | 日韩国产欧美在线视频| 亚洲人123区| 亚洲色图色小说| 亚洲男人天堂一区| 一区二区三区欧美激情| 亚洲一区中文在线| 视频在线观看一区| 毛片av一区二区| 国产乱码精品1区2区3区| 国产精品一区二区x88av| 国产91色综合久久免费分享| 国产成人免费视频网站高清观看视频 | 亚洲丝袜精品丝袜在线| 亚洲乱码一区二区三区在线观看| 亚洲日本在线看| 五月天久久比比资源色| 美女一区二区在线观看| 国产呦萝稀缺另类资源| 99热99精品| 精品视频一区二区不卡| 日韩欧美成人一区| 国产精品久久久久久久久免费相片 | xf在线a精品一区二区视频网站| 国产性天天综合网| 亚洲最大成人综合| 久久av资源网| 成人av在线网站| 欧美人与禽zozo性伦| 久久综合久久综合亚洲| 亚洲同性同志一二三专区| 亚洲va中文字幕| 国产精品一区二区视频| 在线这里只有精品| 精品久久久久久久久久久久久久久久久| 久久久五月婷婷| 亚洲成人av一区二区| 国产成人午夜电影网| 欧美日韩国产综合一区二区| 久久综合国产精品| 性欧美大战久久久久久久久| 国产福利不卡视频| 911精品国产一区二区在线| 亚洲国产岛国毛片在线| 美国三级日本三级久久99 | 亚洲夂夂婷婷色拍ww47| 国产一区二区伦理片| 欧美日韩国产bt| 日韩美女啊v在线免费观看| 久久精品国产99国产精品| 色综合久久综合网97色综合| 久久这里只精品最新地址| 亚洲综合久久av| 99久久久久免费精品国产| 久久免费精品国产久精品久久久久| 亚洲成人av中文| 欧美专区在线观看一区| 国产精品国产精品国产专区不蜜 | 欧美三级视频在线播放| 亚洲丝袜另类动漫二区| 丁香一区二区三区| 久久久久久99久久久精品网站| 同产精品九九九| 欧美性受xxxx| 亚洲免费在线看| 91啪九色porn原创视频在线观看| 国产亚洲一区二区三区在线观看| 青青草视频一区| 欧美剧情片在线观看| 成人国产精品免费网站| 日韩一区二区在线免费观看| 色播五月激情综合网| 国产精品另类一区| 国产一区二区在线视频| 日韩欧美国产高清| 蜜桃视频一区二区三区在线观看 | 亚洲一区二区三区四区在线观看| av电影在线观看一区| 国产精品盗摄一区二区三区| 国产99久久久久| 国产精品久久久久久久第一福利 | 在线看不卡av| 亚洲精品成人a在线观看| 色94色欧美sute亚洲线路一久| 亚洲精品成a人| 欧美日韩色综合| 日日摸夜夜添夜夜添亚洲女人| 欧美精选一区二区| 精品一区二区成人精品| 国产色产综合产在线视频| 成人午夜视频网站| 亚洲精品大片www| 欧美电影在线免费观看| 韩国精品主播一区二区在线观看| 久久久一区二区三区| 91美女在线视频| 秋霞午夜av一区二区三区| 久久人人爽人人爽| 91福利在线观看| 久久aⅴ国产欧美74aaa| 亚洲视频免费在线观看| 91麻豆精品国产自产在线观看一区| 美女国产一区二区| 中文字幕佐山爱一区二区免费| 欧美日本精品一区二区三区| 另类小说图片综合网| 亚洲人一二三区| 欧美tickling网站挠脚心| 91在线视频在线| 蜜臀精品久久久久久蜜臀 | 久久精品国产精品亚洲精品| 久久久国产一区二区三区四区小说 | 亚洲第一激情av| 国产亚洲一区字幕| 欧美日本一区二区| 粉嫩av一区二区三区在线播放 | 不卡影院免费观看| 日韩专区一卡二卡| 欧美激情一区二区三区全黄| 欧美日韩和欧美的一区二区| 成人黄页在线观看| 日韩成人午夜精品| 综合激情成人伊人| 久久精品人人做人人爽人人| 7799精品视频| 91国产视频在线观看| 国产成人av电影在线播放| 午夜电影网一区| 亚洲少妇30p| 国产调教视频一区| 精品国内二区三区| 国产精品欧美一区喷水| 欧美精品tushy高清| 99国产麻豆精品| 国产suv精品一区二区883| 精品一区二区三区蜜桃| 亚洲午夜一区二区| 亚洲精品日日夜夜| 一区在线播放视频| 国产精品午夜电影| 久久久久久久久久久久久夜| 日韩欧美黄色影院| 欧美大黄免费观看| 日韩午夜三级在线| 日韩免费高清视频| 日韩亚洲欧美一区| 日韩欧美电影在线| 精品国产一区二区三区四区四| 欧美另类变人与禽xxxxx| 欧美亚州韩日在线看免费版国语版| 97精品久久久久中文字幕| 不卡av电影在线播放| 成人午夜在线视频| 成人福利视频在线看| 波多野结衣在线aⅴ中文字幕不卡| 国产精品18久久久久| 成人综合在线视频| 99视频一区二区| 在线中文字幕一区| 欧美日韩国产成人在线免费| 欧美一级电影网站| 久久先锋影音av鲁色资源| 久久精品水蜜桃av综合天堂| 中文在线免费一区三区高中清不卡| 国产亚洲成aⅴ人片在线观看 | 日韩精品最新网址| 精品欧美乱码久久久久久1区2区| 精品入口麻豆88视频| 日本一区二区三区四区| 国产精品福利一区二区| 一区二区三区国产豹纹内裤在线| 夜夜爽夜夜爽精品视频| 日韩精品国产精品| 国产精品一区二区三区乱码| 91亚洲男人天堂| 欧美日韩aaaaa| 久久先锋影音av鲁色资源网| 亚洲女人的天堂| 青青青爽久久午夜综合久久午夜| 国产精品影视天天线| 日本道色综合久久| 欧美一卡在线观看| 国产精品乱码久久久久久| 亚洲国产精品自拍| 国产成人综合网| 欧美三级资源在线| 欧美国产乱子伦| 日本伊人午夜精品| 91色乱码一区二区三区| 精品乱码亚洲一区二区不卡| 亚洲男人的天堂在线aⅴ视频| 秋霞影院一区二区| 色综合网色综合| www国产成人免费观看视频 深夜成人网| 亚洲天堂久久久久久久| 狠狠久久亚洲欧美| 欧美精品日韩一本| 亚洲免费av在线|