почему read () для файла в linux добавляет символ новой строки в EOF, даже если файл действительно не имеет символа новой строки? Нет , read()
системный вызовне добавляет новую строку в конец файла.
Вы испытываете подобное поведение, потому что, возможно, вы создали текстовый файл с помощью команды vi
и обратите внимание, что новая строка по умолчанию добавляется, если вы создали файл с использованием vi
.
Вы можете проверить это в своей системе, создав пустой текстовый файл, используя vi
, а затем запустив команду wc
.
Также вы можете прочитать данные файла, используя систему read()
Вызовите все сразу, если вы знаете размер файла (найдите размер с помощью системного вызова stat()
) и можете избежать цикла while
.
This
while( (n = read(fd2, src, read_size-1)) != 0) {
/* some code */
}
Изменить на
struct stat var;
stat(filename, &var); /* check the retuen value of stat()..having all file info now */
off_t size = var.st_size;
Теперь у вас есть size
файла, создайте один динамический массив или массив стека, равный size
, и прочитайте данные из файла.
char *ptr = malloc(size + 1);
Теперь прочитайте все данные сразу, как
read(fd,ptr,size);/*now ptr having all file contents */
И наконец, когда работа сделана, Не забудьте освободить ptr
, позвонив по номеру free(ptr)
.