LINUX.ORG.RU

функция read читает не весь файл


0

0
file = open("1",O_RDWR|O_CREAT);
struct stat fileStat;
if(fstat(file,&fileStat)!=0) return -1;
unsigned long int bufLength = fileStat.st_size;
char * buf = new char(bufLength);
int i = read(file,buf,bufLength);
close(file);
printf("%d, %d\n",bufLength,i);

В итоге возращается 2 разных значения. В чем дело - не знаю...

★★★★★
Вобщем я переписал этот кусок так:

file = open("1",O_RDWR|O_CREAT);
struct stat fileStat;
if(fstat(file,&fileStat)!=0) return -1;
unsigned long int bufLength = fileStat.st_size;
char * buf = (char *) malloc(bufLength);
int readed = read(file,buf,bufLength);
close(file);

В кратце: заменил вызов new на malloc и все заработало.
Буду очень благодарен всем, кто сможет дать свои пояснения.
trex6 ★★★★★
() автор топика
Ответ на: комментарий от trex6
Вообще говоря, read не гарантирует, что будет прочтено столько, сколько было указано, может считать и меньший кусок. Так что на этот кусок кода полагаться нельзя.
JackYF ★★★★
()
Ответ на: комментарий от true_admin
> Может, сделать минифак по сям

по сям плям плям

dilmah ★★★★★
()
Ответ на: комментарий от true_admin
> и не пропускать посты тех кто его не читал? :)

Лучше переносить с позором в толксы.
LamerOk ★★★★★
()
Ответ на: комментарий от yoghurt
Всем спасибо, кто по делу отписался. Очередной раз делаю вывод - учить матчасть никогда не поздно.
trex6 ★★★★★
() автор топика
Ответ на: комментарий от trex6
да... невнимательность - страшный враг программиста
xydo ★★
()
Ответ на: комментарий от true_admin
>и тут valgrind бы не помешал. Может, сделать минифак по сям и не пропускать посты тех кто его не читал? :)

Дело не в том, что не читал. Я уже и читал много и писал. Просто работая под *nix и имея в наличии только vi и g++ не всегда легко разобратся в своем коде и найти описку. Извиняюсь, если потратил чье-то бесценное время. Ну а тем, кто по теме отписался - еще раз огромное спасибо!!!

trex6 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.