Я пытаюсь написать простой веб-сервер с использованием сокетов на C. Я хочу проверить, является ли 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#