2012-09-15 15 views
11

estoy estudiando acerca del núcleo de Linux y tengo un problemalo que es la "corriente" en linux fuente del núcleo

veo muchos archivos de código fuente del núcleo de Linux tienen current-> archivos. Entonces, ¿qué es la "corriente"?

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

Ejemplo? 'current' es un nombre de variable realmente genérico. – nneonneo

Respuesta

20

Es un puntero al proceso actual (es decir, el proceso que emitió la llamada al sistema).

En x86, se define en arch/x86/include/current.h (archivos similares para otros 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 */ 

Más información en Linux Device Drivers capítulo 2:

El puntero actual se refiere al proceso de usuario que está ejecutando actualmente. Durante la ejecución de una llamada al sistema, como abrir o leer, el proceso actual es el que invoca la llamada. El código del kernel puede usar información específica del proceso usando current, si es necesario. [...]

Cuestiones relacionadas