2012-09-15 1 views
11

sto studiando su kernel Linux e ho un problemaquella che è la "corrente" in linux sorgenti del kernel

Vedo molti file sorgente del kernel Linux hanno current-> file. Allora, qual è la "corrente"?

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

Esempio? 'Current' è un nome di variabile molto generico. – nneonneo

risposta

20

È un puntatore al processo corrente (ovvero il processo che ha generato la chiamata di sistema).

Su x86, è definito in arch/x86/include/current.h (file simili per altri archi).

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

maggiori informazioni in Linux Device Drivers capitolo 2:

Il puntatore corrente si riferisce al processo utente attualmente in esecuzione. Durante l'esecuzione di una chiamata di sistema, ad esempio aperta o leggere, il processo attuale è quella che ha richiamato la chiamata. codice del kernel può utilizzare le informazioni specifiche del processo utilizzando corrente, se ha bisogno di farlo. [...]