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

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

?? open.c

?? 帶中文注釋的linux 0.11源碼 很好
?? C
字號:
/** linux/fs/open.c** (C) 1991 Linus Torvalds*/#include <string.h>		// 字符串頭文件。主要定義了一些有關字符串操作的嵌入函數。#include <errno.h>		// 錯誤號頭文件。包含系統中各種出錯號。(Linus 從minix 中引進的)。#include <fcntl.h>		// 文件控制頭文件。用于文件及其描述符的操作控制常數符號的定義。#include <sys/types.h>		// 類型頭文件。定義了基本的系統數據類型。#include <utime.h>		// 用戶時間頭文件。定義了訪問和修改時間結構以及utime()原型。#include <sys/stat.h>		// 文件狀態頭文件。含有文件或文件系統狀態結構stat{}和常量。#include <linux/sched.h>	// 調度程序頭文件,定義了任務結構task_struct、初始任務0 的數據,// 還有一些有關描述符參數設置和獲取的嵌入式匯編函數宏語句。#include <linux/tty.h>		// tty 頭文件,定義了有關tty_io,串行通信方面的參數、常數。#include <linux/kernel.h>	// 內核頭文件。含有一些內核常用函數的原形定義。#include <asm/segment.h>	// 段操作頭文件。定義了有關段寄存器操作的嵌入式匯編函數。// 取文件系統信息系統調用函數。intsys_ustat (int dev, struct ustat *ubuf){  return -ENOSYS;}//// 設置文件訪問和修改時間。// 參數filename 是文件名,times 是訪問和修改時間結構指針。// 如果times 指針不為NULL,則取utimbuf 結構中的時間信息來設置文件的訪問和修改時間。如果// times 指針是NULL,則取系統當前時間來設置指定文件的訪問和修改時間域。intsys_utime (char *filename, struct utimbuf *times){  struct m_inode *inode;  long actime, modtime;// 根據文件名尋找對應的i 節點,如果沒有找到,則返回出錯碼。  if (!(inode = namei (filename)))    return -ENOENT;// 如果訪問和修改時間數據結構指針不為NULL,則從結構中讀取用戶設置的時間值。  if (times)    {      actime = get_fs_long ((unsigned long *) &times->actime);      modtime = get_fs_long ((unsigned long *) &times->modtime);// 否則將訪問和修改時間置為當前時間。    }  else    actime = modtime = CURRENT_TIME;// 修改i 節點中的訪問時間字段和修改時間字段。  inode->i_atime = actime;  inode->i_mtime = modtime;// 置i 節點已修改標志,釋放該節點,并返回0。  inode->i_dirt = 1;  iput (inode);  return 0;}/** XXX should we use the real or effective uid? BSD uses the real uid,* so as to make this call useful to setuid programs.*//** 文件屬性XXX,我們該用真實用戶id 還是有效用戶id?BSD 系統使用了真實用戶id,* 以使該調用可以供setuid 程序使用。(注:POSIX 標準建議使用真實用戶ID)*///// 檢查對文件的訪問權限。// 參數filename 是文件名,mode 是屏蔽碼,由R_OK(4)、W_OK(2)、X_OK(1)和F_OK(0)組成。// 如果請求訪問允許的話,則返回0,否則返回出錯碼。intsys_access (const char *filename, int mode){  struct m_inode *inode;  int res, i_mode;// 屏蔽碼由低3 位組成,因此清除所有高比特位。  mode &= 0007;// 如果文件名對應的i 節點不存在,則返回出錯碼。  if (!(inode = namei (filename)))    return -EACCES;// 取文件的屬性碼,并釋放該i 節點。  i_mode = res = inode->i_mode & 0777;  iput (inode);// 如果當前進程是該文件的宿主,則取文件宿主屬性。  if (current->uid == inode->i_uid)    res >>= 6;// 否則如果當前進程是與該文件同屬一組,則取文件組屬性。  else if (current->gid == inode->i_gid)    res >>= 6;// 如果文件屬性具有查詢的屬性位,則訪問許可,返回0。  if ((res & 0007 & mode) == mode)    return 0;/** XXX we are doing this test last because we really should be* swapping the effective with the real user id (temporarily),* and then calling suser() routine. If we do call the* suser() routine, it needs to be called last.*//** XXX 我們最后才做下面的測試,因為我們實際上需要交換有效用戶id 和* 真實用戶id(臨時地),然后才調用suser()函數。如果我們確實要調用* suser()函數,則需要最后才被調用。*/// 如果當前用戶id 為0(超級用戶)并且屏蔽碼執行位是0 或文件可以被任何人訪問,則返回0。  if ((!current->uid) && (!(mode & 1) || (i_mode & 0111)))    return 0;// 否則返回出錯碼。  return -EACCES;}//// 改變當前工作目錄系統調用函數。// 參數filename 是目錄名。// 操作成功則返回0,否則返回出錯碼。intsys_chdir (const char *filename){  struct m_inode *inode;// 如果文件名對應的i 節點不存在,則返回出錯碼。  if (!(inode = namei (filename)))    return -ENOENT;// 如果該i 節點不是目錄的i 節點,則釋放該節點,返回出錯碼。  if (!S_ISDIR (inode->i_mode))    {      iput (inode);      return -ENOTDIR;    }// 釋放當前進程原工作目錄i 節點,并指向該新置的工作目錄i 節點。返回0。  iput (current->pwd);  current->pwd = inode;  return (0);}//// 改變根目錄系統調用函數。// 將指定的路徑名改為根目錄'/'。// 如果操作成功則返回0,否則返回出錯碼。intsys_chroot (const char *filename){  struct m_inode *inode;// 如果文件名對應的i 節點不存在,則返回出錯碼。  if (!(inode = namei (filename)))    return -ENOENT;// 如果該i 節點不是目錄的i 節點,則釋放該節點,返回出錯碼。  if (!S_ISDIR (inode->i_mode))    {      iput (inode);      return -ENOTDIR;    }// 釋放當前進程的根目錄i 節點,并重置為這里指定目錄名的i 節點,返回0。  iput (current->root);  current->root = inode;  return (0);}//// 修改文件屬性系統調用函數。// 參數filename 是文件名,mode 是新的文件屬性。// 若操作成功則返回0,否則返回出錯碼。intsys_chmod (const char *filename, int mode){  struct m_inode *inode;// 如果文件名對應的i 節點不存在,則返回出錯碼。  if (!(inode = namei (filename)))    return -ENOENT;// 如果當前進程的有效用戶id 不等于文件i 節點的用戶id,并且當前進程不是超級用戶,則釋放該// 文件i 節點,返回出錯碼。  if ((current->euid != inode->i_uid) && !suser ())    {      iput (inode);      return -EACCES;    }// 重新設置i 節點的文件屬性,并置該i 節點已修改標志。釋放該i 節點,返回0。  inode->i_mode = (mode & 07777) | (inode->i_mode & ~07777);  inode->i_dirt = 1;  iput (inode);  return 0;}//// 修改文件宿主系統調用函數。// 參數filename 是文件名,uid 是用戶標識符(用戶id),gid 是組id。// 若操作成功則返回0,否則返回出錯碼。intsys_chown (const char *filename, int uid, int gid){  struct m_inode *inode;// 如果文件名對應的i 節點不存在,則返回出錯碼。  if (!(inode = namei (filename)))    return -ENOENT;// 若當前進程不是超級用戶,則釋放該i 節點,返回出錯碼。  if (!suser ())    {      iput (inode);      return -EACCES;    }// 設置文件對應i 節點的用戶id 和組id,并置i 節點已經修改標志,釋放該i 節點,返回0。  inode->i_uid = uid;  inode->i_gid = gid;  inode->i_dirt = 1;  iput (inode);  return 0;}//// 打開(或創建)文件系統調用函數。// 參數filename 是文件名,flag 是打開文件標志:只讀O_RDONLY、只寫O_WRONLY 或讀寫O_RDWR,// 以及O_CREAT、O_EXCL、O_APPEND 等其它一些標志的組合,若本函數創建了一個新文件,則mode// 用于指定使用文件的許可屬性,這些屬性有S_IRWXU(文件宿主具有讀、寫和執行權限)、S_IRUSR// (用戶具有讀文件權限)、S_IRWXG(組成員具有讀、寫和執行權限)等等。對于新創建的文件,這些// 屬性只應用于將來對文件的訪問,創建了只讀文件的打開調用也將返回一個可讀寫的文件句柄。// 若操作成功則返回文件句柄(文件描述符),否則返回出錯碼。(參見sys/stat.h, fcntl.h)intsys_open (const char *filename, int flag, int mode){  struct m_inode *inode;  struct file *f;  int i, fd;// 將用戶設置的模式與進程的模式屏蔽碼相與,產生許可的文件模式。  mode &= 0777 & ~current->umask;// 搜索進程結構中文件結構指針數組,查找一個空閑項,若已經沒有空閑項,則返回出錯碼。  for (fd = 0; fd < NR_OPEN; fd++)    if (!current->filp[fd])      break;  if (fd >= NR_OPEN)    return -EINVAL;// 設置執行時關閉文件句柄位圖,復位對應比特位。  current->close_on_exec &= ~(1 << fd);// 令f 指向文件表數組開始處。搜索空閑文件結構項(句柄引用計數為0 的項),若已經沒有空閑// 文件表結構項,則返回出錯碼。  f = 0 + file_table;  for (i = 0; i < NR_FILE; i++, f++)    if (!f->f_count)      break;  if (i >= NR_FILE)    return -EINVAL;// 讓進程的對應文件句柄的文件結構指針指向搜索到的文件結構,并令句柄引用計數遞增1。  (current->filp[fd] = f)->f_count++;// 調用函數執行打開操作,若返回值小于0,則說明出錯,釋放剛申請到的文件結構,返回出錯碼。  if ((i = open_namei (filename, flag, mode, &inode)) < 0)    {      current->filp[fd] = NULL;      f->f_count = 0;      return i;    }/* ttys are somewhat special (ttyxx major==4, tty major==5) *//* ttys 有些特殊(ttyxx 主號==4,tty 主號==5)*/// 如果是字符設備文件,那么如果設備號是4 的話,則設置當前進程的tty 號為該i 節點的子設備號。// 并設置當前進程tty 對應的tty 表項的父進程組號等于進程的父進程組號。  if (S_ISCHR (inode->i_mode))    if (MAJOR (inode->i_zone[0]) == 4)      {	if (current->leader && current->tty < 0)	  {	    current->tty = MINOR (inode->i_zone[0]);	    tty_table[current->tty].pgrp = current->pgrp;	  }// 否則如果該字符文件設備號是5 的話,若當前進程沒有tty,則說明出錯,釋放i 節點和申請到的// 文件結構,返回出錯碼。      }    else if (MAJOR (inode->i_zone[0]) == 5)      if (current->tty < 0)	{	  iput (inode);	  current->filp[fd] = NULL;	  f->f_count = 0;	  return -EPERM;	}/* Likewise with block-devices: check for floppy_change *//* 同樣對于塊設備文件:需要檢查盤片是否被更換 */// 如果打開的是塊設備文件,則檢查盤片是否更換,若更換則需要是高速緩沖中對應該設備的所有// 緩沖塊失效。  if (S_ISBLK (inode->i_mode))    check_disk_change (inode->i_zone[0]);// 初始化文件結構。置文件結構屬性和標志,置句柄引用計數為1,設置i 節點字段,文件讀寫指針// 初始化為0。返回文件句柄。  f->f_mode = inode->i_mode;  f->f_flags = flag;  f->f_count = 1;  f->f_inode = inode;  f->f_pos = 0;  return (fd);}//// 創建文件系統調用函數。// 參數pathname 是路徑名,mode 與上面的sys_open()函數相同。// 成功則返回文件句柄,否則返回出錯碼。intsys_creat (const char *pathname, int mode){  return sys_open (pathname, O_CREAT | O_TRUNC, mode);}// 關閉文件系統調用函數。// 參數fd 是文件句柄。// 成功則返回0,否則返回出錯碼。intsys_close (unsigned int fd){  struct file *filp;// 若文件句柄值大于程序同時能打開的文件數,則返回出錯碼。  if (fd >= NR_OPEN)    return -EINVAL;// 復位進程的執行時關閉文件句柄位圖對應位。  current->close_on_exec &= ~(1 << fd);// 若該文件句柄對應的文件結構指針是NULL,則返回出錯碼。  if (!(filp = current->filp[fd]))    return -EINVAL;// 置該文件句柄的文件結構指針為NULL。  current->filp[fd] = NULL;// 若在關閉文件之前,對應文件結構中的句柄引用計數已經為0,則說明內核出錯,死機。  if (filp->f_count == 0)    panic ("Close: file count is 0");// 否則將對應文件結構的句柄引用計數減1,如果還不為0,則返回0(成功)。若已等于0,說明該// 文件已經沒有句柄引用,則釋放該文件i 節點,返回0。  if (--filp->f_count)    return (0);  iput (filp->f_inode);  return (0);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆精品久久精品色综合| 91国产免费观看| 一本久久a久久精品亚洲| 欧美精品日日鲁夜夜添| 欧美国产禁国产网站cc| 日韩精品亚洲一区二区三区免费| 成人国产亚洲欧美成人综合网| 91精品国产麻豆| 亚洲综合久久久| 国产98色在线|日韩| 欧美一区二区视频网站| **欧美大码日韩| 国产不卡在线播放| 久久久久久久久蜜桃| 蜜臀99久久精品久久久久久软件| 欧美在线免费观看视频| 日韩久久一区二区| 成人午夜免费视频| 国产亚洲欧洲997久久综合| 久久国产尿小便嘘嘘尿| 欧美高清激情brazzers| 一区二区三区在线免费观看| 成人永久aaa| 精品日韩在线观看| 美腿丝袜亚洲综合| 欧美高清视频在线高清观看mv色露露十八| 国产精品美女久久久久久| 国产一区二区电影| 久久久亚洲精华液精华液精华液| 福利电影一区二区| 久久综合久久综合久久综合| 亚洲一区二区综合| 欧美日韩免费一区二区三区| 亚洲黄色免费网站| 91精品办公室少妇高潮对白| 亚洲免费在线观看视频| 成人视屏免费看| 成人免费在线观看入口| 99在线精品观看| 亚洲人成人一区二区在线观看 | 99re亚洲国产精品| 亚洲美女免费在线| 欧美日韩中文另类| 日韩精品免费视频人成| 日韩欧美卡一卡二| 国产综合成人久久大片91| 欧美成人一区二区三区片免费| 日韩高清不卡在线| 日韩欧美久久久| 国产盗摄视频一区二区三区| 国产精品天干天干在线综合| 91理论电影在线观看| 天天综合天天综合色| 日韩免费观看2025年上映的电影| 国产一区二区三区久久久| 国产视频在线观看一区二区三区| 白白色 亚洲乱淫| 亚洲狠狠爱一区二区三区| 欧美一级日韩免费不卡| 国产精品影视网| 亚洲精品中文字幕在线观看| 欧美日本在线播放| 国产美女精品一区二区三区| 亚洲女同女同女同女同女同69| 欧美蜜桃一区二区三区 | 亚洲一区av在线| 日韩精品在线网站| 99久久伊人网影院| 青青草97国产精品免费观看无弹窗版| 精品久久人人做人人爽| 99久久精品国产一区二区三区| 亚洲成av人综合在线观看| 久久久久亚洲综合| 欧美三级中文字| 夫妻av一区二区| 日产欧产美韩系列久久99| 国产精品久久久久久亚洲毛片| 欧美撒尿777hd撒尿| 国产成人免费xxxxxxxx| 亚洲一区二区五区| 欧美国产精品中文字幕| 欧美日韩国产天堂| 盗摄精品av一区二区三区| 麻豆成人久久精品二区三区红 | 日本一区二区久久| 欧美一级理论片| 一本久久a久久精品亚洲| 国产99久久久国产精品潘金| 天天爽夜夜爽夜夜爽精品视频| 国产精品免费av| 欧美大尺度电影在线| 欧美在线观看你懂的| 国产a视频精品免费观看| 麻豆国产精品视频| 午夜精品久久久久久| 亚洲视频资源在线| 国产女主播视频一区二区| 日韩午夜激情视频| 3atv在线一区二区三区| 色老综合老女人久久久| 国产不卡视频在线观看| 国产在线视频不卡二| 男人操女人的视频在线观看欧美| 最新中文字幕一区二区三区| 久久精品亚洲精品国产欧美kt∨ | 韩国午夜理伦三级不卡影院| 视频一区二区不卡| 亚洲大片一区二区三区| 亚洲青青青在线视频| 国产精品伦一区| 国产无一区二区| 久久欧美中文字幕| 久久九九99视频| 国产偷国产偷亚洲高清人白洁| 精品国产乱子伦一区| 精品国产区一区| 精品国产网站在线观看| 久久精品夜色噜噜亚洲aⅴ| 国产视频一区二区在线| 国产精品天美传媒| 亚洲欧美日韩在线播放| 亚洲激情自拍偷拍| 午夜亚洲福利老司机| 五月激情综合网| 另类小说欧美激情| 国内久久婷婷综合| 国产**成人网毛片九色| 不卡的av电影| 色噜噜夜夜夜综合网| 欧美日韩精品专区| 欧美一区二区啪啪| 久久久久久久久免费| 欧美国产欧美综合| 亚洲图片欧美视频| 久久99久久久久久久久久久| 精品系列免费在线观看| 成人伦理片在线| 欧美网站一区二区| 日韩色在线观看| 国产欧美一区二区精品久导航| 中文字幕一区二区视频| 亚洲综合免费观看高清完整版 | 欧美精品自拍偷拍| 亚洲精品在线观看网站| 国产精品欧美一区喷水| 亚洲高清中文字幕| 国产九九视频一区二区三区| 99久久99久久精品国产片果冻| 欧美日韩免费在线视频| 久久精品男人的天堂| 亚洲一区二区av在线| 国产精品538一区二区在线| 91色porny在线视频| 日韩一级片网址| 中文字幕在线一区免费| 日韩精品成人一区二区三区| 国产精品2024| 欧美日韩国产天堂| 国产精品水嫩水嫩| 日韩精品一二三区| av电影天堂一区二区在线观看| 欧美三级中文字| 欧美激情在线一区二区| 亚洲成人免费观看| 大尺度一区二区| 欧美一区二视频| 亚洲日本丝袜连裤袜办公室| 精品一区二区免费| 欧美日韩精品系列| 国产精品免费丝袜| 国产永久精品大片wwwapp| 欧美日韩精品二区第二页| 中文字幕av免费专区久久| 热久久久久久久| 在线观看日韩精品| 国产精品久久久久久久久免费桃花 | 一色桃子久久精品亚洲| 久久国产视频网| 91精品国产综合久久小美女| 亚洲品质自拍视频网站| www.欧美.com| 久久精品人人爽人人爽| 蜜臀va亚洲va欧美va天堂| 欧美日韩一卡二卡| 一区二区在线观看免费| 不卡av免费在线观看| 久久久久久久久伊人| 黄网站免费久久| 精品不卡在线视频| 免费高清不卡av| 91精品国产入口在线| 亚洲成人综合在线| 欧美三级电影在线看| 亚洲一区二区三区视频在线播放| 99久久精品情趣| 国产精品电影一区二区三区| 成人激情av网| 18成人在线观看| 色综合咪咪久久| 一区二区三区高清不卡|