我在C中编写Java编译器就像一个娱乐项目。但是,我注意到当我们在命令行中编译文件时,例如“gcc example.c”,编译器能够在终端的工作目录中找到example.c而不会出错。编译器如何知道要搜索example.c的目录? OS是否在编译器的目录中找到example.c?另外,我如何在我的C程序中模拟这个动作,以便用户可以通过调用我的编译器从任何工作目录编译他们的java程序,如:“compiler example.java”?
答案 0 :(得分:1)
fopen
会将亲属路径视为相对于当前目录,而不是可执行文件所在的目录。大多数(甚至全部)文件处理功能与大多数其他语言相同。
因此,为了模拟Java编译器的行为,您需要做的就是遍历argv
,fopen(the_file_name)
中的文件名,为该文件生成代码,然后fopen(class_file_name, "wb")
(其中class_file_name
为file_name
,.java
替换为.class
),并将生成的字节码写入其中。
获取当前目录的完整路径既不必要也不有用。请注意,如果您只是将每个参数附加到当前目录名称,则代码将中断绝对路径,而对于相对路径和绝对路径,简单地执行任何操作都将执行正确的操作。
答案 1 :(得分:0)
如果我理解正确,您需要获取当前工作目录的完整路径。 POSIX函数 getcwd (在Windows _getcwd 上)可用于检索程序的当前工作目录。
然后搜索此目录并找到您的源(如果它们存在)应该很简单。