Ничего себе.Во-первых, это общее хорошее правило: проверьте, какие системные вызовы возвращены вам.Всегда.
int main(){
char str[50];
int fd = open("/dev/pts/2",O_RDONLY);
if (fd == -1) {
perror("open");
...
}
Во-вторых, чтение может вернуть меньше байтов, чем вы запрашиваете, посмотрите на человека:
Это не ошибка, если это число меньше, чем числозапрошенные байты;это может произойти, например, потому что на самом деле сейчас доступно меньше байтов (может быть, потому что мы были близки к концу файла, или потому что мы читаем из канала, или из терминала), или потому что read () была прерванасигнал.
Таким образом, даже 1 байт может быть возвращен из чтения.В-третьих, чтение может вернуть -1:
При ошибке возвращается -1, и значение errno устанавливается соответствующим образом.
Так что, я думаю, лучше написать:
ssize_t nread;
if ((nread = read(fd, str, 20) > 0)) {
str[nread] = '\0';
} else if (nread == -1) {
perror("read");
...
}
printf("%s\n",str);
return 0;
}