2016-01-14 1 views
1

Я пытаюсь проверить файл с помощью stat(). В документации указано, что fucntion вернет struct под названием stat со всей необходимой информацией. Однако, прямо ниже, он просто говоритСложная документация по функции stat() C

При успешном завершении возвращается ноль. При ошибке возвращается -1, а errno устанавливается соответствующим образом.

Итак, ноль возвращен вместе со структурой? Получают ли они оба в массиве или что-то еще? Я очень новичок в C, и я даже не уверен, что struct может быть элементом массива.

+3

«return» - это немного художественная лицензия, она не использует * возвращаемое значение * для этой информации, но параметр «out» –

ответ

4

Вы должны передать указатель на структуру этого типа, и он заполнится.

Да, формулировка немного запутанна, но это означает, что функция возвращает 0 или -1 и «возвращает» данные, которые вы хотите в своем параметре. Проверьте здесь: http://codewiki.wikidot.com/c:system-calls:stat

+2

Это не раздражает вообще. Все системные вызовы должны иметь обработку ошибок метод и 'stat()' в этом отношении могут использовать много обработки ошибок, например, если файл отсутствует или для этого пользователя не разрешено надлежащее разрешение, 'stat()' должен сообщать об ошибке, и ERRNO предоставит информацию для ошибки. Это стандартный способ сделать это. Просто потому, что ОП путают, он не раздражает. –

+1

«Раздражающая» точка заключается в том, что тот же самый глагол используется для * возвращенного * статуса и * возвращенной структуры, один является возвращаемым значением функции, другой заполняется внутри параметра. «Раздражающий» был плохим выбором слова, может быть, запутанным было бы лучше. – Aganju

1

Возвращаемое значение либо успех или ошибка, и вы передаете адрес struct stat в качестве одного из аргументов

Проверка на наличие ошибок, и если их нет (возвращаемое значение 0), то предположим, что прошло stuct stat теперь имеет действительную информацию: http://linux.die.net/man/2/stat

+0

Я понимаю. Могу ли я просто сказать что-то вроде 'good = stat (inputFile, & someStruct)'? Затем я могу проверить, чтобы «good! = 0»? Или я могу просто проверить, работает ли функция неявно, глядя на содержимое 'someStruct'? Я предполагаю, что нет, потому что в ячейках памяти в структуре все равно есть данные? – Anonymous

+0

'0' фактически означает успех. Проверьте, что 'good == 0', и если это правда, то используйте' struct stat', но вы бы хотели – asimes

+0

А вы правы. Но это перебор? Существует ли переменная checker, такая как _need_, или я могу определить, работает ли функция, глядя на 'struct'? – Anonymous

1

Посмотрите на очень простом примере:

#include<stdio.h> 
#include<stdlib.h> 
#include<sys/types.h> 
#include<sys/stat.h> 
#include<unistd.h> 
int main() 
{ 
     char *fd= "test.txt"; 
     int y; 
     struct stat buf; 
     y = stat(fd,&buf); 
     if(y == 0) { 
     int size = buf.st_size; 
     printf("%d",size); } 

} 

При успешном завершении возвращается нуль. При ошибке возвращается -1, а errno - .

Здесь stat возвращаемое значение, чтобы у .Possible значения y равно 0, -1 или любой ERRNO. Надеюсь, ты это получишь.

+0

вы хотите сказать 'struct stat buf [50]' вместо распределения динамической памяти? –

+0

Спасибо за предложение, Обновленный ответ –

+1

Вместо того, чтобы писать код, вы должны объяснить OP необходимость этих типов возвращаемых данных и то, как они используются вместе с 'errno' для обработки любого исключения во время syscall –

Смежные вопросы