2012-09-15 92 views
11

我正在學習關於Linux內核的「當前」和我有一個問題什麼是Linux內核源

我看到許多Linux內核源文件有電流 - >文件。那麼什麼是「當前」?

struct file *fget(unsigned int fd) 
{ 
    struct file *file; 
    struct files_struct *files = current->files; 

    rcu_read_lock(); 
    file = fcheck_files(files, fd); 
    if (file) { 
      /* File object ref couldn't be taken */ 
      if (file->f_mode & FMODE_PATH || 
       !atomic_long_inc_not_zero(&file->f_count)) 
        file = NULL; 
    } 
    rcu_read_unlock(); 

    return file; 
} 
+0

例子? 'current'是一個非常通用的變量名稱。 – nneonneo

回答

20

它是指向當前進程(即發出系統調用的進程)的指針。

在x86上,它在arch/x86/include/current.h中定義(其他拱形的類似文件)。

#ifndef _ASM_X86_CURRENT_H 
#define _ASM_X86_CURRENT_H 

#include <linux/compiler.h> 
#include <asm/percpu.h> 

#ifndef __ASSEMBLY__ 
struct task_struct; 

DECLARE_PER_CPU(struct task_struct *, current_task); 

static __always_inline struct task_struct *get_current(void) 
{ 
    return percpu_read_stable(current_task); 
} 

#define current get_current() 

#endif /* __ASSEMBLY__ */ 

#endif /* _ASM_X86_CURRENT_H */ 

的更多信息在Linux Device Drivers第2章:

當前指針是指當前正在執行的用戶進程。在執行系統調用期間,例如打開或讀取,當前進程是調用該調用的進程。如果需要的話,內核代碼可以使用當前的流程特定信息。 [...]

相關問題