C程序只能在给定绝对路径时写入文件,而在给定相对路径时不能写入

Posted

技术标签:

【中文标题】C程序只能在给定绝对路径时写入文件,而在给定相对路径时不能写入【英文标题】:C program can only write to file when given absolute path and cant when given relative path 【发布时间】:2020-10-03 20:05:03 【问题描述】:

使用 linux-mint。 在这个简单的代码中,我试图写入一个文件名“input.txt”,它与这个脚本所在的目录在同一个目录中。当我给出相对路径时,即只有“input.txt”作为路径文件, 文件中没有写入任何内容,但是当我给出绝对路径时,程序可以工作,并且 “hello world”被写入“input.txt”。 我不明白有什么区别

#include <zconf.h>
#include <fcntl.h>
#include <sys/wait.h>
int main() 
    close(1);
    open("/home/maor/CLionProjects/untitled2/input.txt", O_RDWR );
    if (fork() == 0) 
        int fd = dup(1);
        write(fd, "hello ", 6);
     else 
        wait(0);
        write(1, "world\n ", 6);
    


【问题讨论】:

相对路径的基础不是程序所在的目录,而是执行程序的进程的工作目录,通常是用于执行程序的命令行shell的工作目录, 相对于.......什么的路径?某些“当前目录”可能在您认为的位置,也可能不在? 【参考方案1】:

相对路径的基础不是程序所在的目录,而是 执行程序的进程的工作目录,通常是 用于执行程序的命令行 shell 的工作目录

埃里克的回答解决了这个问题。

【讨论】:

以上是关于C程序只能在给定绝对路径时写入文件,而在给定相对路径时不能写入的主要内容,如果未能解决你的问题,请参考以下文章

C# 中是不是存在一种方法来获取给定两个绝对路径输入的相对路径? [复制]

如何在给定两个绝对路径的情况下找到相对路径?

给定相对路径时,如何让 MSBUILD 评估和打印完整路径?

绝对路径与相对路径

maven项目只能读到绝对路径下的文件,读不到相对路径下的文件

使用 Bash 将给定当前目录的绝对路径转换为相对路径