Stat函数始终在有效路径上返回-1

时间:2019-03-28 07:14:37

标签: c tcp http-headers

我正在尝试使用C语言中的套接字编写一个简单的Web服务器。我想检查请求的URL是否只是目录或文件,即localhost:8080 / docroot或localhost:8080 / docroot / file.html。 / p>

这就是为什么我想使用stat()以及ISDIR和ISREG宏。不幸的是stat函数总是返回-1。请求网址本身是正确的(在此示例中为/ docroot)。我还尝试在其前面添加一个点,但这也不起作用。

struct stat fileinfo;
char request_line[255];
char* request_method; // GET, POST etc.
char* request_path; // the url
strncpy(request_line, in, indexOf(in, '\n'));

request_method = strtok(request_line, " ");
request_path = strtok(NULL, " ");

// the actual thing
if (stat(request_path, &fileinfo) == -1) {
  printf("Invalid path: #%s#", request_path);
  throwError();
}
if (S_ISDIR(fileinfo.st_mode))
  renderDirectory(request_path, sockfd);
else if (S_ISREG(fileinfo.st_mode)) {
  transferFile(request_path, sockfd);
} 
else
  throwError("Fehler beim erkennen der Datei/des Pfades");

因此,正如我所说,request_path返回正确的URL / docroot。该目录位于cwd内部。不幸的是stat函数无论如何都返回-1。也许这只是我的一个愚蠢的错误,但我似乎无法弄清楚……

编辑:printf的输出为:

#/docroot#

1 个答案:

答案 0 :(得分:0)

所以我找到了问题。 所有人都说这是因为道路不相对:您错了。我不知道为什么,但是显然在稍后要调用的代码的某些部分中存在线程问题。我删除了这一点,现在不管有没有点和/或斜杠,它都可以工作。