2012-09-15 11 views
11

uczę o jądro Linuksa i mam problemco jest „prąd” w linux źródła jądra

widzę wiele plików źródłowych jądra Linux mają natężenie prądu> pliki. Czym jest "prąd"?

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

Przykład? 'current' to naprawdę ogólna nazwa zmiennej. – nneonneo

Odpowiedz

20

Jest to wskaźnik do bieżącego procesu (tj. Procesu, który wywołał wywołanie systemowe).

Na x86, jest zdefiniowany w arch/x86/include/current.h (podobne pliki dla innych archs).

#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 */ 

Więcej informacji w Linux Device Drivers rozdział 2:

bieżący wskaźnik odnosi się do procesu dla tego wykonania. Podczas wykonywania wywołania systemowego, takiego jak otwarty lub odczyt, bieżący proces jest tym, który wywołał wywołanie. Kod jądra może wykorzystywać informacje specyficzne dla procesu, używając bieżącego, jeśli to konieczne. [...]

Powiązane problemy