Добрый день!
Ситуация такая, сделал программу, использующую разбросанный ввод-вывод (может быть это и не имеет значения).
При отображении данных на консоль появляется несколько лишних символов (не читаемый мусор) + дублируется строка. Почему так происходит?
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <sys/uio.h>
int main () {
struct iovec iov[3];
ssize_t nr;
int fd, i;
char *buf[] = {
"The term buccaneer comes from the word boucan.
",
"A boucan is a wooden frame used for cooking meat.
",
"Buccaneer is the West Indies name for a pirate.
" };
fd = open ("/home/alexander/test.txt", O_CREAT | O_WRONLY, S_IRWXU | S_IRGRP | S_IROTH);
if (fd == -1) {
perror ("open");
return 1;
}
for (i = 0; i < 3; i++) {
iov[i].iov_base = buf[i];
iov[i].iov_len = strlen (buf[i]);
}
nr = writev (fd, iov, 3);
if (nr == -1) {
perror ("writev");
return 1;
}
printf ("
Wrote %d bytes.
", (int) nr);
if (close (fd)) {
perror ("close");
return 1;
}
fd = open ("/home/alexander/test.txt", O_RDONLY);
char foo[47], bar[50], baz[48];
iov[0].iov_base = foo;
iov[0].iov_len = sizeof (foo);
iov[1].iov_base = bar;
iov[1].iov_len = sizeof (bar);
iov[2].iov_base = baz;
iov[2].iov_len = sizeof (baz);
nr = readv (fd, iov, 3);
if (nr == -1) {
perror ("readv");
return 1;
}
printf ("
Read %d bytes.
", (int) nr);
for (i = 0; i < 3; i++)
printf ("%d: %s", i, (char *) iov[i].iov_base);
if (close (fd)) {
perror ("close");
return 1;
}
return 0;
}

Пользователь решил продолжить мысль 06 Июня 2009, 13:43:34:
А вот если сделать так
char *foo = (char *) malloc (strlen (buf[0])), *bar = (char *) malloc (strlen (buf[1])), *baz = (char *) malloc (strlen (buf[2]));
то все работает нормально.