【问题标题】:How can I print file path in C inside Minix OS? [closed]如何在 Minix OS 中的 C 中打印文件路径? [关闭]
【发布时间】:2020-07-05 23:51:24
【问题描述】:

我必须在 Minix 操作系统中编辑 exec 系统调用,使其创建的每个进程都应该打印程序文件路径 + 程序名称:

例如,如果我在终端中输入ls,下一行应该显示path/to/ls/ls 始终采用这种格式:filepath/programName

我已经设法打印了程序名称,但文件路径有问题。谁能告诉我如何打印?

这是 sys_exec.c 的代码:

#include "syslib.h"
#include "stdio.h" //I included this library

int sys_exec(endpoint_t proc_ep, vir_bytes stack_ptr, vir_bytes progname,
        vir_bytes pc, vir_bytes ps_str)
{
/* A process has exec'd.  Tell the kernel. */

        message m;

        m.m_lsys_krn_sys_exec.endpt = proc_ep;
        m.m_lsys_krn_sys_exec.stack = stack_ptr;
        m.m_lsys_krn_sys_exec.name = progname;
        m.m_lsys_krn_sys_exec.ip = pc;
        m.m_lsys_krn_sys_exec.ps_str = ps_str;

        //edited by me
        puts((char*)progname);//this prints the program name

        return _kernel_call(SYS_EXEC, &m);
}

还有一些图片作为参考:

this is what happens when I type ls

【问题讨论】:

  • 好吧,char* 演员应该感觉很糟糕,因为它是错误的。
  • 我更新了帖子中的图片,它不再打印乱码了。代码还是一样,只需要重新编译内核来更新我所做的更改。
  • 乱码是因为我上次尝试打印文件路径失败

标签: c operating-system system-calls minix


【解决方案1】:

我走错了路径,我需要编辑的文件是\usr\src\minix\minix\servers\vfs\exec.c,我正在尝试编辑\usr\src\minix\minix\lib\libsys\sys_exec.c

在正确的文件中,我可以访问 get_read_vp 函数中名为 fullpath 的变量。我导入了stdio.h,然后在函数中输入了printf("executing: %s\n", fullpath);

【讨论】: