我正在尝试使用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#
答案 0 :(得分:0)
所以我找到了问题。 所有人都说这是因为道路不相对:您错了。我不知道为什么,但是显然在稍后要调用的代码的某些部分中存在线程问题。我删除了这一点,现在不管有没有点和/或斜杠,它都可以工作。