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 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.