fstat() возвращает 0 с размером файла 0 и ошибкой 11
Я пытаюсь сделать следующее в моем коде:
{
int y,n_bytes;
struct stat temp_data;
y = fstat(netdev->queue_fd[class_id],&temp_data);
printf("Success - %d , size -> %lld , Error- %d \n",y,temp_data.st_size,errno);
n_bytes = write(netdev->queue_fd[class_id],buffer->data,buffer->size);
y = fstat(netdev->queue_fd[class_id],&temp_data);
printf("After write Success - %d , size -> %lld , Error- %d and the value of n_bytes is - %d ",y,temp_data.st_size,errno,n_bytes);
}
и вывод, который я получаю:
Success - 0, size -> 0 , Error - 11
After write Success - 0, size -> 0, Error - 11 and the value of n_bytes is - 1526
В чем причина того, что размер равен 0, а ошибка номер 11?? Есть ли другой способ получить размер файла??
Примечание: здесь Netdev->queue_fd[class_id]
это дескриптор файла Значение n_bytes варьируется между {41,1514,66,..} в разных вызовах. (Всегда больше 0)
Спасибо
2 ответа
Netdev->queue_fd[class_id]
файловый дескриптор
- Обычный файл или
- Любая запись sys/fs или
- Char/Block/ Файл сетевого устройства?
если это не обычный файл, то его размер не будет обновляться после команды записи.
проверить тип файла S_ISREG()
Статус
errno
после успеха не имеет значения. Значениеerrno
изменяется только при неудаче.fstat()
возвращает ноль, поэтому значение errno не имеет значения.Что значит
write()
вернуть? Вы не проверяете, поэтому не знаете, что файл должен быть больше послеwrite()
вызов.