【问题标题】:linux system stat() method is not working correctlylinux系统stat()方法无法正常工作
【发布时间】:2015-05-23 17:07:37
【问题描述】:

当我这样写路径时,我 stat() 正在工作。

char homePath[] = "../../usr/http/";

if(stat("usr/bin",&file_info) == -1)
{
    strcat(sendMessage, path);
    strcat(sendMessage, "\n\nHTTP/1.1 400 Not Found\n");
    return 0;
}

但下面的代码不起作用。 stat() 总是返回 -1。 我认为 strcat 是问题所在。但是当我检查合并的路径字符串时,它似乎没问题。请告诉我如何解决它。

    strcat(path, homePath);
    strcat(path, target);


    if(stat(path,&file_info) == -1)
    {
        strcat(sendMessage, path);
        strcat(sendMessage, "\n\nHTTP/1.1 400 Not Found\n");
        return 0;
    }

【问题讨论】:

  • 你初始化path了吗?还有sendMessage最后的内容是什么?
  • 当然。我已经做到了。字符路径[200] = "";

标签: linux string system stat strcat


【解决方案1】:

路径的第一个字符可能无法打印。使用 strcpy。更安全的是,使用 strncpystrncat

strncpy(path, homePath, sizeof(path));
strncat(path, target, sizeof(path) - strnlen(path, sizeof(path)));

阅读 Linux 手册页,了解为什么首选 strn 版本。

【讨论】:

  • 尝试使用调试器运行并确保字符串正确。另外,当 stat 返回错误 (-1) 时,使用 strerror_r() 获取错误原因。
【解决方案2】:

如何设置homePath和target?

格式看起来不错:http://linux.die.net/man/2/stat

【讨论】:

  • 是很正常的形式。 homepath = "../../usr/http/" target="test"
  • 当你在调用 stat 之前打印路径?看起来还可以吗?
  • 当然,我试过了。看起来还可以。我想知道它是否包含不可见的数据。
  • 好的,您可能想一次打印一个字符,以确保没有任何有趣的事情发生。但是在你这样做之前检查 ernno 以验证错误,#include 然后调用: printf("The stat error is: %s\n", strerror(errno));因为 stat 应该将 errno 设置为特定的错误值。
猜你喜欢
  • 2015-08-24
  • 2017-10-27
  • 2014-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 2023-04-04
  • 1970-01-01
相关资源
最近更新 更多