Я столкнулся с ошибкой (вероятно), которую я не могу объяснить, и я был бы счастлив, если бы кто-то смог.
** Я написал следующую программу:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/uio.h>
#include <string.h>
int main(int argc, char** argv)
{
char arr1[5], arr2[5], arr3[5];
struct iovec iov[3];
ssize_t n;
int fd, i;
fd = open("/home/oz/Desktop/test", O_RDONLY);
if (fd == -1)
{
perror("open error");
return (1);
}
iov[0].iov_base = arr1;
iov[1].iov_base = arr2;
iov[2].iov_base = arr3;
iov[0].iov_len = 5;
iov[1].iov_len = 5;
iov[2].iov_len = 5;
n = readv(fd, iov, 3);
if (n == -1)
{
perror("read error");
return (1);
}
for (i = 0; i < 3; i++)
{
printf("Buffer %d Content : [%s]\n", i, (char *)iov[i].iov_base);
}
// DEBUG - START
printf("Total bytes read : %d\n", (int)n);
char * TEST = iov[0].iov_base;
printf("TEST LAST CHARACTER (int)= %d.\nTEST LENGTH = %d\n", TEST[5], (int)strlen(TEST));
// DEBUG - END
return 0;
}
Содержимое файла, из которого я прочитал (это однострочный текстовый файл):
123456789012345678901234567890
** Выход
Buffer 0 Content : [12345]
Buffer 1 Content : [67890]
Buffer 2 Content : [12345]
Total bytes read : 15
TEST LAST CHARACTER (int)= 127.
TEST LENGTH = 6
** Мой вопрос:
Символ со значением ASCII 127 был добавлен в первый буфер по неизвестной причине. (В моем стандартном выводе я фактически вижу его как белый квадрат между «5» и «]» в первой строке вывода.
Почему произошла эта странная вещь?
Спасибо ..