1. 程式人生 > >Linux核心中檔案操作函式整理

Linux核心中檔案操作函式整理

1.判斷檔案是否存在

struct file *filp  = NULL;

filp = filp_open("/etc/passwd", O_RDONLY, 0);

if (IS_ERR(filp)) {
    printk("Cannot open ......\n");
}

2.根據描述符查詢路徑

在Linux核心中,已知一個程序的pid和其開啟檔案的檔案描述符fd,如何獲取該檔案的絕對路徑。

相關原理

1.通過程序pid獲取程序描述符task_struct;

2.通過task_struct獲取該程序開啟檔案結構files_struct,從而獲取檔案描述符表;

3.以fd為索引在檔案描述符表中獲取對應檔案的結構體file;

4.通過file獲取對應path結構,該結構封裝當前檔案對應的dentry和掛載點;

5.通過核心函式d_path()獲取該檔案的絕對路徑;

實現方法

通過程序pid獲取程序描述符demo:

1 structtask_struct *get_proc(pid_t pid)
2 {
3 structpid *pid_struct = NULL;
4
structtask_struct *mytask = NULL;
5
6 pid_struct = find_get_pid(pid);
7 if(!pid_struct)
8 returnNULL;
9 mytask = pid_task(pid_struct, PIDTYPE_PID);
10 returnmytask;
11 }

通過fd以及d_path()獲取絕對路徑demo:

1 intget_path(

相關推薦

Linux核心檔案操作函式整理

1.判斷檔案是否存在 struct file *filp = NULL; filp = filp_open("/etc/passwd", O_RDONLY, 0); if (IS_ERR(filp)) { printk("Cannot open ...

Linux核心查詢檔案操作函式的過程

先根據路徑找到父目錄項,然後找到對應的i_node,i_ndoe的成員 file_operations * i_fop是指向檔案操作函式集的指標。 在建立檔案的i_node時會設定 file_operations * i_fop的值。一般預設使用init_spec

C語言檔案操作函式彙總

#include <stdio.h> #include <stdlib.h> int main() { FILE* fd = fopen("test.txt","r"); if(NULL == fd)//檔案開啟失敗 { perror("fope

linux 核心的概念-模組與裝置檔案

        模組:是在核心空間執行的程式,實際上是一種目標物件檔案,沒有連結,不能獨立執行,但是可以裝載到系統中作為核心的一部分執行,從而可以動態擴充核心的功能。模組最主要的用處就是用來實現裝置驅動程式。Linux下對於一個硬體的驅動,可以有兩種方式:直接載入到核心程式

C語言常用的檔案操作函式

C函式庫中檔案操作函式: (1)fopen:開啟檔案 函式原型:FILE* fopen(char *path, char *mode); 函式引數:path----開啟檔名及其路徑      mode----r w a …… 函式返回:成功則返回指向該流的檔案指標,失敗則返回NULL並把錯誤存在errno中

linux核心讀寫使用者態檔案

在VFS的支援下,使用者態程序讀寫任何型別的檔案系統都可以使用read和write著兩個系統呼叫,但是在linux核心中沒有這樣的系統呼叫我們如何操作檔案呢?我們知道read和write在進入核心態之後,實際執行的是sys_read和sys_write,但是檢視核心原始碼,發現這些操作檔案的函式都沒有匯出(

php的陣列操作函式整理

PHP 中的陣列實際上是一個有序圖。圖是一種把 values 對映到 keys的型別。此型別在很多方面做了優化,因此可以把它當成真正的陣列來使用,或列表(向量),散列表(是圖的一種實現),字典,集合,棧,佇列以及更多可能性。因為可以用另一個 PHP 陣列作為值,也可以很容易地

linux C —— 檔案操作函式

chmod int chmod(const char *path, mode_t mode) 將檔案read的檔案許可權變成所有者有讀寫許可權,其他使用者只有讀的許可權。這和shell指令中的chmod有相同的功效。 #include <stdi

標準C語言檔案操作函式的記憶體版

1. 初衷 專案需要,itron作業系統中實裝freetype+harfbuzz的字型引擎,但itron系統中沒有支援檔案系統! 所以只能將依賴庫中的libdatrie和libthai中的檔案操作換成記憶體版。 2. 程式碼 廢話不說,直接上程式碼。 #include

Linux C的檔案操作及相關函式

一、Linux檔案的屬性及檔案的分類 二、檔案描述符的概念及作用 三、系統呼叫的概念 三、不帶快取的檔案I/O操作的相關函式 四、帶快取的檔案I/O操作的相關函式 一、Linux檔案的屬性 檔案的屬性: 我們在Gcc編譯器輸入“ ls  -al"指令時,除了有不同

Linux核心提供的一些字串轉換函式

原文地址:http://blog.csdn.net/zhangzhaocap/article/details/7230067 lib/vsprintf.c [cpp] view plain copy print? unsigned longlong simple

C#檔案操作整理

直接上程式碼:(其中有些引用在C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0)你的VS安裝目錄,具體請自行百度。 using System; using

Linux 核心獲取時間分析基於do_gettimeofday()

Linux 核心中獲取時間分析基於do_gettimeofday() 核心程式碼能一直獲取一個當前時間的表示,通過檢視jifies的值。通常這個值只代表從最後一次啟動以來的時間,這個事實對驅動來說無關,因為它的生命週期受限於系統的uptime。 驅動可以使用jifie

Linux系統檔案行末尾出現^M的原因及解決辦法

不同系統,有不同的換行符號: 在windows下的文字檔案的每一行結尾,都有一個回車('\n')和換行('\r') 在linux下的文字檔案的每一行結尾,只有一個回車('\n'); 在Mac下的文字檔案的每一行結尾,只有一個換行('\r'); 因此:^M出現的原因: 在linux下開啟w

linux核心連結串列list_entry()函式的分析

這個函式可以通過list的指標域推算出它的節點所指向的值,具體程式碼實現如下: /** * list_entry - get the struct for this entry * @ptr: the &struct list_head pointer. * @type:

C語言檔案操作函式總結——超詳細

版權宣告 本文原創作者:谷哥的小弟 作者部落格地址:http://blog.csdn.net/lfdfhl 檔案與流 在C語言中有三種標準流: stdin(standard input stream)標準輸入流。在大多數環境中為從鍵盤輸入;scanf( )和getchar( )

Linux核心的迴圈緩衝區【轉】

  (轉自:https://blog.csdn.net/heanyu/article/details/6291825) 迴圈緩衝區定義在include/linux/kfifo.h中,如下: struct kfifo { unsigned char *buffer; /

Linux核心連結串列的設計思路

一般實際專案中的連結串列,節點中儲存的資料其實是一個結構體,這個結構體中包含若干的成員,這些成員加起來構成了我們的節點資料區域。 實際上鍊表操作是相同的,而涉及到資料區域的操作就有不同。 鑑於以上2點,能不能有一種辦法把所有連結串列中操作方法裡共同的部分提取出來用一套標準方法實現,然

linux c 檔案的建立 讀寫

標頭檔案:#include<stdlib.h 定義: FILE *fd 建立 : fd=fopen("pathname" ,"w"); pathename: 路徑 或者直接在當前目錄下 w:只寫 r:  只讀 b: 二進位制 可以組合使用。

【轉】對Linux核心程序上下文和中斷上下文的理解

轉自:http://www.embedu.org/Column/Column240.htm 核心空間和使用者空間是作業系統理論的基礎之一,即核心功能模組執行在核心空間,而應用程式執行在使用者空間。現代的CPU都具有不同的操作模式,代表不同的級別,不同的級別具有不同的功能,在較低的級別中將禁止某些