?? stat.c
字號:
/* passed* linux/fs/stat.c** (C) 1991 Linus Torvalds*/#include <set_seg.h>
#include <errno.h> // 錯誤號頭文件。包含系統中各種出錯號。(Linus 從minix 中引進的)。#include <sys/stat.h> // 文件狀態頭文件。含有文件或文件系統狀態結構stat{}和常量。#include <linux/fs.h> // 文件系統頭文件。定義文件表結構(file,buffer_head,m_inode 等)。#include <linux/sched.h> // 調度程序頭文件,定義了任務結構task_struct、初始任務0 的數據,// 還有一些有關描述符參數設置和獲取的嵌入式匯編函數宏語句。#include <linux/kernel.h> // 內核頭文件。含有一些內核常用函數的原形定義。#include <asm/segment.h> // 段操作頭文件。定義了有關段寄存器操作的嵌入式匯編函數。//// 復制文件狀態信息。// 參數inode 是文件對應的i 節點,statbuf 是stat 文件狀態結構指針,用于存放取得的狀態信息。static voidcp_stat (struct m_inode *inode, struct stat *statbuf){ struct stat tmp; int i;// 首先驗證(或分配)存放數據的內存空間。 verify_area (statbuf, sizeof (*statbuf));// 然后臨時復制相應節點上的信息。 tmp.st_dev = inode->i_dev; // 文件所在的設備號。 tmp.st_ino = inode->i_num; // 文件i 節點號。 tmp.st_mode = inode->i_mode; // 文件屬性。 tmp.st_nlink = inode->i_nlinks; // 文件的連接數。 tmp.st_uid = inode->i_uid; // 文件的用戶id。 tmp.st_gid = inode->i_gid; // 文件的組id。 tmp.st_rdev = inode->i_zone[0]; // 設備號(如果文件是特殊的字符文件或塊文件)。 tmp.st_size = inode->i_size; // 文件大小(字節數)(如果文件是常規文件)。 tmp.st_atime = inode->i_atime; // 最后訪問時間。 tmp.st_mtime = inode->i_mtime; // 最后修改時間。 tmp.st_ctime = inode->i_ctime; // 最后節點修改時間。// 最后將這些狀態信息復制到用戶緩沖區中。 for (i = 0; i < sizeof (tmp); i++) put_fs_byte (((char *) &tmp)[i], &((char *) statbuf)[i]);}//// 文件狀態系統調用函數 - 根據文件名獲取文件狀態信息。// 參數filename 是指定的文件名,statbuf 是存放狀態信息的緩沖區指針。// 返回0,若出錯則返回出錯碼。intsys_stat (char *filename, struct stat *statbuf){ struct m_inode *inode;// 首先根據文件名找出對應的i 節點,若出錯則返回錯誤碼。 if (!(inode = namei (filename))) return -ENOENT;// 將i 節點上的文件狀態信息復制到用戶緩沖區中,并釋放該i 節點。 cp_stat (inode, statbuf); iput (inode); return 0;}//// 文件狀態系統調用 - 根據文件句柄獲取文件狀態信息。// 參數fd 是指定文件的句柄(描述符),statbuf 是存放狀態信息的緩沖區指針。// 返回0,若出錯則返回出錯碼。intsys_fstat (unsigned int fd, struct stat *statbuf){ struct file *f; struct m_inode *inode;// 如果文件句柄值大于一個程序最多打開文件數NR_OPEN,或者該句柄的文件結構指針為空,或者// 對應文件結構的i 節點字段為空,則出錯,返回出錯碼并退出。 if (fd >= NR_OPEN || !(f = current->filp[fd]) || !(inode = f->f_inode)) return -EBADF;// 將i 節點上的文件狀態信息復制到用戶緩沖區中。 cp_stat (inode, statbuf); return 0;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -