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