не понимают, как правильно реализовать [read
и write
]
Предполагая, что вы имеете в виду вызывать их (не реализовывать их),улов с read
и write
в том, что они могут читать или писать меньше, чем требуется, поэтому вы должны вызывать их в цикле.
size_t to_write = strlen(str);
while (to_write) {
ssize_t written = write(fd, str, to_write);
if (written < 0) {
perror(NULL);
exit(1);
}
str += written;
to_write -= written;
}
Чтение работает так же, если вы знаете, сколько вынужно прочитать или если вы пытаетесь прочитать весь файл. (Чтобы прочитать весь файл, читайте куски до тех пор, пока read
не вернет 0
. Факторы 8*1024
будут хорошими размерами кусков.)
В противном случае все становится намного сложнее. Как вы знаете, сколько читать, прежде чем читать? Например, если вы хотите прочитать строку, вы не знаете, какова длина строки, пока вы не встретите завершающий перевод строки. Вы можете читать персонажа за раз, но это очень неэффективно. Вы можете делать то же самое, что и stdio, и использовать буфер, который содержит избыток. В этот момент вы можете использовать stdio.