fopen函数 返回No such file or directory,但是文件是存在的

在修改开源代码时,遇到fopen返回Nosuchfileordirectory错误。尽管绝对路径正确,但问题出在代码中使用了chroot和chdir函数改变了根目录,导致fopen无法找到文件。解决方法是检查并调整这些系统调用对路径的影响。
摘要由CSDN通过智能技术生成

        C语言调用fopen打开一个存在的文件并且是绝对路径,结果返回No such file or directory,正常自己写代码应该不会遇到问题。我是在一个开源代码基础上做修改,遇到上述问题。

        自己写一个程序相同的代码时可以打开的,所以可以断定不是代码问题,一定是开源代码有什么骚操作。最后我发现原有代码里的fopen没有问题,但是他打开文件有一个判断,有一个变量标识控制路径的赋值,结果把这个路径打印出来,是一个相对路径。在查看那个控制变量,通过如下代码调用后设置。

int Privsep_Chroot(const char *path)
{
    if (chdir(path) < 0) {
        return (OS_INVALID);
    }

    if (chroot(path) < 0) {
        return (OS_INVALID);
    }

    if (chdir("/") < 0) {
        return (OS_INVALID);
    }

    return (OS_SUCCESS);
}

        查看了下chroot()和chdir()作用。就是他俩搞的鬼,更改了root目录。所以导致fopen找到不路径位置。唉,真相只有一个,代码问题。之前看代码没注意这块,终究掉进这个坑里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值