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

问题描述 投票:-2回答:1

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

这就是我想使用stat()和ISDIR和ISREG宏的原因。不幸的是,stat函数总是返回-1。请求URL本身是正确的(在此示例中,它是/ 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#
c tcp http-headers
1个回答
0
投票

所以我发现了这个问题。你们所有人都说这是因为路径不相对:你错了。我不知道为什么,但显然是代码的某些部分中的一个线程问题,这个问题很晚才被调用,这就是问题所在。我删除了那一点,现​​在它可以使用和不使用点和/或斜杠。

© www.soinside.com 2019 - 2024. All rights reserved.