小编典典

Linux内核源代码中的“最新”是什么?

linux

我正在研究Linux内核,但是有问题。

我看到许多Linux内核源文件都有current->files。那是什么current

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;
 }

阅读 303

收藏
2020-06-07

共1个答案

小编典典

它是指向当前进程(即发出系统调用的进程)的指针。

在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设备驱动程序第2章中的更多信息:

当前指针是指当前正在执行的用户进程。在执行系统调用(例如打开或读取)期间,当前进程是调用该调用的进程。如果需要,内核代码可以通过使用current来使用特定于进程的信息。[…]

2020-06-07