В Linux я открываю псевдотерминал со стороны мастера. Хотя на стороне раба нет клиента, кажется, что псевдотечность повторяет все, что я ему пишу, а это не то, чего я ожидаю.
Рассмотрим следующий код:
int main(int argc, char * argv[])
{
int ptyfd;
int rc; /* return code */
char readbuf[3];
ptyfd = open("/dev/ptmx", O_RDWR | O_NOCTTY);
die_on_error(ptyfd, "open ptmx");
/* unlock and print slave name */
rc = unlockpt(ptyfd);
die_on_error(rc, "unlockpt");
printf("Slave pts name : %s\n", ptsname(ptyfd));
write(ptyfd, "C", 1);
rc=read(ptyfd, readbuf, 1);
die_on_error(rc, "read");
printf("read returned %c\n",readbuf[0]);
return 0;
}
Когда я запускаю эту программу, я ожидаю, что вызов read блокируется, но вместо этого он сразу же возвращается, а содержимое readbuf имеет значение C. Как я могу изменить это поведение? Когда ведомая сторона не открыта, я хотел бы, чтобы персонаж, написанный на главной стороне, либо исчезал, либо получал пятерки для последующего чтения ведомой стороной.
Является ли изменение атрибутов главной стороны правильным способом сделать это?