Я никогда не использовал stat()
и не знаю, что происходит.C, проблема со статом()
У меня есть серверная программа, которая принимает запрос GET и анализирует путь к файлу. У меня также есть клиентская программа в том же каталоге, который отправляет запрос GET. Программа сервера принимает запрос GET и правильно разбирает путь к файлу. Путь к каталогу, в котором обе программы является: ~/asimes2/hw2/
Если у меня есть программа-клиент посыла: GET /Makefile HTTP/1.0\r\n\r\n
Затем программа сервер получает то же самое. У меня есть два printf()
s для подтверждения. Я правильно разбираю путь к файлу и просматриваю полный путь. Она выводит:
File path = '/Makefile'
Full path = '~/asimes2/hw2/Makefile'
NOT FOUND!
Makefile
существует в ~/asimes/hw2
. Вот код:
// Alex: Parse the PATH from the GET request using httpGet
char* filePath, * pathStart = strchr(httpGet, '/');
if (pathStart != NULL) {
// Alex: Increment to the first '/'
httpGet += (int)(pathStart-httpGet);
// Alex: Assuming " HTTP" is not a part of the PATH, this finds the end of the PATH
char* pathEnd = strstr(httpGet, " HTTP");
if (pathEnd != NULL) {
int endLoc = (int)(pathEnd-httpGet);
filePath = (char*)malloc((endLoc+1)*sizeof(char));
strncpy(filePath, httpGet, endLoc);
filePath[endLoc] = '\0';
}
else errorMessageExit("The GET request was not formatted as expected");
}
else errorMessageExit("The GET request was not formatted as expected");
printf("File path = '%s'\n", filePath);
char* fullPath = (char*)malloc((14+strlen(filePath))*sizeof(char));
strcpy(fullPath, "~/asimes2/hw2");
strcat(fullPath, filePath);
printf("Full path = '%s'\n", fullPath);
struct stat fileStat;
if (stat(fullPath, &fileStat) == -1) printf("NOT FOUND!\n");
else printf("HOORAY\n");
пожалуйста [не набрасывайте возвращаемое значение 'malloc()'] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc). –
'' '' getenv («HOME») ' –