-1
Следующий код демонстрирует, что при вводе \0
вход не считывается после него.Почему ' 0' заканчивает ввод read()?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
int fd;
int fd2;
char buf[200];
int n;
char fname[] = "/tmp/tst-perror.XXXXXX";
fd = mkstemp (fname);
fd2 = dup (fd);
write(fd2, "a", 2); // \0 is written out
write(fd2, "b", 1);
write(fd2, "\n", 1);
close (fd2);
lseek (fd, 0, SEEK_SET);
n = read (fd, buf, sizeof (buf));
printf("%.*s", (int) n, buf);
close (fd);
unlink (fname);
return 0;
}
Выходной сигнал a
.
Если мы используем 1
вместо 2
в первом write()
, выход ab
. Это правильное поведение? Я не нашел ничего об этом в чтении (2).
Это как с-строки работы. В противном случае ваш 'printf' не будет знать, где заканчивается строка. – tkausl
Лучшим критерием является заполнение буфера некоторым символом, например. '' x'', затем 'read' и распечатать содержимое буфера в виде шестнадцатеричных чисел в цикле:' for (int i = 0; i <20; i ++) printf ("% 02x \ n", buf [ я]); ' – user3386109