#linux-kernel
Вопрос:
Эта лаборатория находится в лаборатории операционной системы на ядре linux0.11.
Когда используйте функцию открыть, чтобы открыть /var/процесс.файл журнала в файле init/main.c.
// 加载文件系统
setup((void *)amp;drive_info);
// 打开/dev/tty0,建立文件描述符0和tty0的关联
// open的第三个参数是mode,表示打开模式
(void)open("/dev/tty0", O_RDWR, 0);
// 让文件描述符1和tty0也关联
// dup函数是复制文件描述符,返回一个新的文件描述符
(void)dup(0);
// 让文件描述符2和tty0也关联
(void)dup(0);
// 打开日志文件/var/process.log,建立文件描述符0666和tty0的关联
LogFd = open("/var/process.log", O_CREAT | O_TRUNC | O_WRONLY, 0666);
Назначенный файловый дескриптор(fd) равен 3, следовательно, LogFd=3. Когда состояние процесса переключается, например, в функции fork.c fork, я хочу использовать функцию fprintk для печати журналов в файл /var/process.log.
p->state = TASK_RUNNING; /* do this last, just in case */
// 在此输出新建进程的日志到文件 ————就绪状态N
// 这里的进程号是新建的进程pid
fprintk(LogFd, "%ldt%ct%ldn", last_pid, 'J', jiffies);
Но это не работает. Если параметр fd, используемый для fprintk, равен 3, запись в файл /var/process.log невозможна. Но если я использую 4 вместо 3, это сработает. Он может записывать журналы в /var/process.log.
Я не могу понять, почему. Возвращаемое значение fd функцией open равно 3.
Почему 3 не работает?
Вместо этого почему 4 работает?