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

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

?? namei.c

?? linux下的源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
      bh->b_dirt = 1;      brelse (bh);      iput (dir);      *res_inode = inode;      return 0;    }// 若上面在目錄中取文件名對應的目錄項結構操作成功(也即bh 不為NULL),取出該目錄項的i 節點號// 和其所在的設備號,并釋放該高速緩沖區以及目錄的i 節點。  inr = de->inode;  dev = dir->i_dev;  brelse (bh);  iput (dir);// 如果獨占使用標志O_EXCL 置位,則返回文件已存在出錯碼,退出。  if (flag & O_EXCL)    return -EEXIST;// 如果取該目錄項對應i 節點的操作失敗,則返回訪問出錯碼,退出。  if (!(inode = iget (dev, inr)))    return -EACCES;// 若該i 節點是一個目錄的節點并且訪問模式是只讀或只寫,或者沒有訪問的許可權限,則釋放該i// 節點,返回訪問權限出錯碼,退出。  if ((S_ISDIR (inode->i_mode) && (flag & O_ACCMODE)) ||      !permission (inode, ACC_MODE (flag)))    {      iput (inode);      return -EPERM;    }// 更新該i 節點的訪問時間字段為當前時間。  inode->i_atime = CURRENT_TIME;// 如果設立了截0 標志,則將該i 節點的文件長度截為0。  if (flag & O_TRUNC)    truncate (inode);// 最后返回該目錄項i 節點的指針,并返回0(成功)。  *res_inode = inode;  return 0;}//// 系統調用函數 - 創建一個特殊文件或普通文件節點(node)。// 創建名稱為filename,由mode 和dev 指定的文件系統節點(普通文件、設備特殊文件或命名管道)。// 參數:filename - 路徑名;mode - 指定使用許可以及所創建節點的類型;dev - 設備號。// 返回:成功則返回0,否則返回出錯碼。intsys_mknod (const char *filename, int mode, int dev){  const char *basename;  int namelen;  struct m_inode *dir, *inode;  struct buffer_head *bh;  struct dir_entry *de;// 如果不是超級用戶,則返回訪問許可出錯碼。  if (!suser ())    return -EPERM;// 如果找不到對應路徑名目錄的i 節點,則返回出錯碼。  if (!(dir = dir_namei (filename, &namelen, &basename)))    return -ENOENT;// 如果最頂端的文件名長度為0,則說明給出的路徑名最后沒有指定文件名,釋放該目錄i 節點,返回// 出錯碼,退出。  if (!namelen)    {      iput (dir);      return -ENOENT;    }// 如果在該目錄中沒有寫的權限,則釋放該目錄的i 節點,返回訪問許可出錯碼,退出。  if (!permission (dir, MAY_WRITE))    {      iput (dir);      return -EPERM;    }// 如果對應路徑名上最后的文件名的目錄項已經存在,則釋放包含該目錄項的高速緩沖區,釋放目錄// 的i 節點,返回文件已經存在出錯碼,退出。  bh = find_entry (&dir, basename, namelen, &de);  if (bh)    {      brelse (bh);      iput (dir);      return -EEXIST;    }// 申請一個新的i 節點,如果不成功,則釋放目錄的i 節點,返回無空間出錯碼,退出。  inode = new_inode (dir->i_dev);  if (!inode)    {      iput (dir);      return -ENOSPC;    }// 設置該i 節點的屬性模式。如果要創建的是塊設備文件或者是字符設備文件,則令i 節點的直接塊// 指針0 等于設備號。  inode->i_mode = mode;  if (S_ISBLK (mode) || S_ISCHR (mode))    inode->i_zone[0] = dev;// 設置該i 節點的修改時間、訪問時間為當前時間。  inode->i_mtime = inode->i_atime = CURRENT_TIME;  inode->i_dirt = 1;// 在目錄中新添加一個目錄項,如果失敗(包含該目錄項的高速緩沖區指針為NULL),則釋放目錄的// i 節點;所申請的i 節點引用連接計數復位,并釋放該i 節點。返回出錯碼,退出。  bh = add_entry (dir, basename, namelen, &de);  if (!bh)    {      iput (dir);      inode->i_nlinks = 0;      iput (inode);      return -ENOSPC;    }// 令該目錄項的i 節點字段等于新i 節點號,置高速緩沖區已修改標志,釋放目錄和新的i 節點,釋放// 高速緩沖區,最后返回0(成功)。  de->inode = inode->i_num;  bh->b_dirt = 1;  iput (dir);  iput (inode);  brelse (bh);  return 0;}//// 系統調用函數 - 創建目錄。// 參數:pathname - 路徑名;mode - 目錄使用的權限屬性。// 返回:成功則返回0,否則返回出錯碼。intsys_mkdir (const char *pathname, int mode){  const char *basename;  int namelen;  struct m_inode *dir, *inode;  struct buffer_head *bh, *dir_block;  struct dir_entry *de;// 如果不是超級用戶,則返回訪問許可出錯碼。  if (!suser ())    return -EPERM;// 如果找不到對應路徑名目錄的i 節點,則返回出錯碼。  if (!(dir = dir_namei (pathname, &namelen, &basename)))    return -ENOENT;// 如果最頂端的文件名長度為0,則說明給出的路徑名最后沒有指定文件名,釋放該目錄i 節點,返回// 出錯碼,退出。  if (!namelen)    {      iput (dir);      return -ENOENT;    }// 如果在該目錄中沒有寫的權限,則釋放該目錄的i 節點,返回訪問許可出錯碼,退出。  if (!permission (dir, MAY_WRITE))    {      iput (dir);      return -EPERM;    }// 如果對應路徑名上最后的文件名的目錄項已經存在,則釋放包含該目錄項的高速緩沖區,釋放目錄// 的i 節點,返回文件已經存在出錯碼,退出。  bh = find_entry (&dir, basename, namelen, &de);  if (bh)    {      brelse (bh);      iput (dir);      return -EEXIST;    }// 申請一個新的i 節點,如果不成功,則釋放目錄的i 節點,返回無空間出錯碼,退出。  inode = new_inode (dir->i_dev);  if (!inode)    {      iput (dir);      return -ENOSPC;    }// 置該新i 節點對應的文件長度為32(一個目錄項的大小),置節點已修改標志,以及節點的修改時間// 和訪問時間。  inode->i_size = 32;  inode->i_dirt = 1;  inode->i_mtime = inode->i_atime = CURRENT_TIME;// 為該i 節點申請一磁盤塊,并令節點第一個直接塊指針等于該塊號。如果申請失敗,則釋放對應目錄// 的i 節點;復位新申請的i 節點連接計數;釋放該新的i 節點,返回沒有空間出錯碼,退出。  if (!(inode->i_zone[0] = new_block (inode->i_dev)))    {      iput (dir);      inode->i_nlinks--;      iput (inode);      return -ENOSPC;    }// 置該新的i 節點已修改標志。  inode->i_dirt = 1;// 讀新申請的磁盤塊。若出錯,則釋放對應目錄的i 節點;釋放申請的磁盤塊;復位新申請的i 節點// 連接計數;釋放該新的i 節點,返回沒有空間出錯碼,退出。  if (!(dir_block = bread (inode->i_dev, inode->i_zone[0])))    {      iput (dir);      free_block (inode->i_dev, inode->i_zone[0]);      inode->i_nlinks--;      iput (inode);      return -ERROR;    }// 令de 指向目錄項數據塊,置該目錄項的i 節點號字段等于新申請的i 節點號,名字字段等于"."。  de = (struct dir_entry *) dir_block->b_data;  de->inode = inode->i_num;  strcpy (de->name, ".");// 然后de 指向下一個目錄項結構,該結構用于存放上級目錄的節點號和名字".."。  de++;  de->inode = dir->i_num;  strcpy (de->name, "..");  inode->i_nlinks = 2;// 然后設置該高速緩沖區已修改標志,并釋放該緩沖區。  dir_block->b_dirt = 1;  brelse (dir_block);// 初始化設置新i 節點的模式字段,并置該i 節點已修改標志。  inode->i_mode = I_DIRECTORY | (mode & 0777 & ~current->umask);  inode->i_dirt = 1;// 在目錄中新添加一個目錄項,如果失敗(包含該目錄項的高速緩沖區指針為NULL),則釋放目錄的// i 節點;所申請的i 節點引用連接計數復位,并釋放該i 節點。返回出錯碼,退出。  bh = add_entry (dir, basename, namelen, &de);  if (!bh)    {      iput (dir);      free_block (inode->i_dev, inode->i_zone[0]);      inode->i_nlinks = 0;      iput (inode);      return -ENOSPC;    }// 令該目錄項的i 節點字段等于新i 節點號,置高速緩沖區已修改標志,釋放目錄和新的i 節點,釋放// 高速緩沖區,最后返回0(成功)。  de->inode = inode->i_num;  bh->b_dirt = 1;  dir->i_nlinks++;  dir->i_dirt = 1;  iput (dir);  iput (inode);  brelse (bh);  return 0;}/** routine to check that the specified directory is empty (for rmdir)*//** 用于檢查指定的目錄是否為空的子程序(用于rmdir 系統調用函數)。*///// 檢查指定目錄是否是空的。// 參數:inode - 指定目錄的i 節點指針。// 返回:0 - 是空的;1 - 不空。static intempty_dir (struct m_inode *inode){  int nr, block;  int len;  struct buffer_head *bh;  struct dir_entry *de;// 計算指定目錄中現有目錄項的個數(應該起碼有2 個,即"."和".."兩個文件目錄項)。  len = inode->i_size / sizeof (struct dir_entry);// 如果目錄項個數少于2 個或者該目錄i 節點的第1 個直接塊沒有指向任何磁盤塊號,或者相應磁盤// 塊讀不出,則顯示警告信息“設備dev 上目錄錯”,返回0(失敗)。  if (len < 2 || !inode->i_zone[0] ||      !(bh = bread (inode->i_dev, inode->i_zone[0])))    {      printk ("warning - bad directory on dev %04x\n", inode->i_dev);      return 0;    }// 讓de 指向含有讀出磁盤塊數據的高速緩沖區中第1 項目錄項。  de = (struct dir_entry *) bh->b_data;// 如果第1 個目錄項的i 節點號字段值不等于該目錄的i 節點號,或者第2 個目錄項的i 節點號字段// 為零,或者兩個目錄項的名字字段不分別等于"."和"..",則顯示出錯警告信息“設備dev 上目錄錯”// 并返回0。  if (de[0].inode != inode->i_num || !de[1].inode ||      strcmp (".", de[0].name) || strcmp ("..", de[1].name))    {      printk ("warning - bad directory on dev %04x\n", inode->i_dev);      return 0;    }// 令nr 等于目錄項序號;de 指向第三個目錄項。  nr = 2;  de += 2;// 循環檢測該目錄中所有的目錄項(len-2 個),看有沒有目錄項的i 節點號字段不為0(被使用)。  while (nr < len)    {// 如果該塊磁盤塊中的目錄項已經檢測完,則釋放該磁盤塊的高速緩沖區,讀取下一塊含有目錄項的// 磁盤塊。若相應塊沒有使用(或已經不用,如文件已經刪除等),則繼續讀下一塊,若讀不出,則出// 錯,返回0。否則讓de 指向讀出塊的首個目錄項。      if ((void *) de >= (void *) (bh->b_data + BLOCK_SIZE))	{	  brelse (bh);	  block = bmap (inode, nr / DIR_ENTRIES_PER_BLOCK);	  if (!block)	    {	      nr += DIR_ENTRIES_PER_BLOCK;	      continue;	    }	  if (!(bh = bread (inode->i_dev, block)))	    return 0;	  de = (struct dir_entry *) bh->b_data;	}// 如果該目錄項的i 節點號字段不等于0,則表示該目錄項目前正被使用,則釋放該高速緩沖區,// 返回0,退出。      if (de->inode)	{	  brelse (bh);	  return 0;	}// 否則,若還沒有查詢完該目錄中的所有目錄項,則繼續檢測。      de++;      nr++;    }// 到這里說明該目錄中沒有找到已用的目錄項(當然除了頭兩個以外),則返回緩沖區,返回1。  brelse (bh);  return 1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产伦精品一区二区三区免费迷 | 亚洲人成网站精品片在线观看| 在线观看av一区二区| 久久精品av麻豆的观看方式| 亚洲六月丁香色婷婷综合久久 | 亚洲女性喷水在线观看一区| 日韩三级电影网址| 91尤物视频在线观看| 国内精品伊人久久久久av影院| 亚洲猫色日本管| 国产调教视频一区| 欧美一级片免费看| 欧美在线观看一区| 99久久综合精品| 国产一区二区精品久久99| 视频在线在亚洲| 亚洲午夜激情网页| 亚洲精品国产视频| 国产精品久久久久久亚洲伦| 久久影院午夜片一区| 日韩视频国产视频| 欧美一区二区在线看| 欧美优质美女网站| 色综合一个色综合| 成人av中文字幕| 韩国在线一区二区| 国内外精品视频| 极品少妇xxxx精品少妇| 日韩精品福利网| 偷窥少妇高潮呻吟av久久免费| 亚洲视频 欧洲视频| 久久午夜色播影院免费高清| 欧美成人aa大片| 国产又黄又大久久| 一区二区三区.www| 欧美人与z0zoxxxx视频| 成人v精品蜜桃久久一区| 国产在线精品一区二区三区不卡 | 欧美午夜精品久久久久久超碰| 91在线视频网址| 91小视频免费观看| 91在线小视频| 欧洲中文字幕精品| 欧美日韩国产精品成人| 欧美日本韩国一区二区三区视频| 欧美中文字幕亚洲一区二区va在线 | 美女性感视频久久| 男人操女人的视频在线观看欧美| 日本欧美加勒比视频| 另类专区欧美蜜桃臀第一页| 久久99国内精品| 国产一区欧美日韩| 成人激情午夜影院| 色综合久久99| 欧美精品乱码久久久久久按摩| 正在播放亚洲一区| 26uuu久久天堂性欧美| 中文字幕国产精品一区二区| 国产精品美女久久久久久久久久久| 18欧美乱大交hd1984| 一区二区在线看| 日韩中文字幕亚洲一区二区va在线 | 国产精品亚洲人在线观看| 成人精品亚洲人成在线| 在线看国产一区| 日韩欧美在线不卡| 中文字幕av一区 二区| 亚洲色图第一区| 美女视频一区二区三区| 丁香一区二区三区| 欧美网站大全在线观看| 精品久久久三级丝袜| 中文字幕一区二区三| 亚洲成人资源在线| 国产精品一品二品| 欧美午夜片在线看| 国产色产综合色产在线视频| 亚洲精品免费在线| 韩国三级电影一区二区| 一本到一区二区三区| 欧美哺乳videos| 亚洲另类在线制服丝袜| 捆绑调教一区二区三区| 蜜桃精品在线观看| 欧美性生活一区| 欧美精品一区二区久久久| 国产原创一区二区| 99国产精品视频免费观看| 欧美伊人久久大香线蕉综合69| 91麻豆精品国产无毒不卡在线观看 | 亚洲天堂久久久久久久| 麻豆成人综合网| 91福利在线观看| 久久色在线观看| 天堂va蜜桃一区二区三区| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 亚洲免费在线播放| 国产一区二区中文字幕| 欧美日韩一区二区三区在线| 国产精品三级av在线播放| 人人精品人人爱| 欧美在线视频全部完| 国产精品亲子伦对白| 久久av资源站| 7777精品伊人久久久大香线蕉最新版| 国产精品视频线看| 国产一区二区福利| 日韩精品最新网址| 日日夜夜精品视频天天综合网| 色一区在线观看| 中文字幕在线不卡一区| 国产一二精品视频| 精品久久久久一区二区国产| 午夜精品国产更新| 欧美在线一区二区| 亚洲免费在线观看视频| 99精品视频在线观看免费| 久久精品视频网| 国内精品国产成人国产三级粉色| 91精品国产色综合久久ai换脸| 亚洲国产精品尤物yw在线观看| 99国内精品久久| 国产精品久久福利| 成人激情动漫在线观看| 国产欧美日韩综合| 国产成人一级电影| 久久久久国产精品麻豆ai换脸| 韩国三级中文字幕hd久久精品| 精品免费一区二区三区| 久久福利资源站| 久久丝袜美腿综合| 国产**成人网毛片九色| 国产日韩精品一区| 成人精品小蝌蚪| 国产精品短视频| 99精品热视频| 亚洲欧美日韩精品久久久久| 色女孩综合影院| 亚洲午夜视频在线观看| 欧美日韩在线电影| 日韩电影在线观看网站| 日韩午夜在线播放| 国产一区不卡在线| 国产精品久久午夜| 91黄视频在线| 日韩中文欧美在线| 日韩精品一区二区三区三区免费| 国产在线视视频有精品| 亚洲国产精品二十页| 91在线观看美女| 亚洲成人在线免费| 精品国产三级a在线观看| 国产精品2024| 亚洲男人天堂一区| 欧美日韩国产三级| 久久99久久久欧美国产| 精品国产在天天线2019| 成人精品视频一区二区三区| 亚洲色欲色欲www在线观看| 欧洲一区在线电影| 美腿丝袜亚洲三区| 国产精品美女久久久久aⅴ| 色偷偷久久人人79超碰人人澡| 午夜精品久久久久| 国产日韩欧美综合一区| 91福利小视频| 国产综合成人久久大片91| 国产精品久久国产精麻豆99网站 | 欧美亚一区二区| 九九**精品视频免费播放| 中文字幕电影一区| 欧美久久久久久久久中文字幕| 狠狠色丁香婷婷综合| 亚洲精品国久久99热| 精品美女一区二区| 一本大道综合伊人精品热热| 日本不卡123| 国产精品二三区| 欧美成人一区二区三区片免费 | 韩国三级在线一区| 一区二区三区四区五区视频在线观看| 久久精品无码一区二区三区 | 中文字幕免费在线观看视频一区| 欧美亚洲图片小说| 国产成人免费网站| 天天色 色综合| 国产精品国产三级国产普通话蜜臀 | 99久久婷婷国产精品综合| 青青青爽久久午夜综合久久午夜 | 免费日韩伦理电影| 亚洲三级在线免费观看| 亚洲精品一区二区三区福利| 欧美亚洲一区三区| 国产高清在线观看免费不卡| 五月婷婷另类国产| 亚洲视频在线观看三级| 久久久激情视频| 日韩欧美专区在线| 欧美日韩一二三| 在线一区二区视频|