4
Linux에서 (유닉스 98 스타일) 유사 TTY를 사용하여 write(1)
및 wall(1)
메시지를 받고 싶습니다.pty에서 읽기
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <signal.h>
#include <utempter.h>
#define BUF_LENGTH 1024
int
main (void)
{
FILE *lf;
int masterfd, slavefd;
char *slave_name = NULL;
char buf[BUF_LENGTH];
size_t nbytes = sizeof(buf);
ssize_t bytes_read;
int exit_code = EXIT_SUCESS;
if ((masterfd = posix_openpt (O_RDWR | O_NOCTTY)) == -1
|| grantpt (masterfd) == -1
|| unlockpt (masterfd) == -1
|| (slave_name = ptsname (masterfd)) == NULL)
exit (EXIT_FAILURE);
if (!(lf = fopen("term.log","w")))
exit (EXIT_FAILURE);
addToUtmp (slave_name, NULL, masterfd);
for (;;)
{
bytes_read = read(masterfd, buf, nbytes);
if (bytes_read <= 0)
break
fwrite (buf, 1, bytes_read, lf);
}
if (bytes_read < 0)
{
fprintf (stderr, "error reading from master pty: %s\n", strerror (errno));
exit_code = EXIT_FAILURE;
}
fclose (lf);
if (slavefd >= 0)
close (slavefd);
if (masterfd >= 0)
{
removeLineFromUtmp (slave_name, masterfd);
close (masterfd);
}
exit (exit_code);
}
문제는 그것이 첫 번째 메시지를 읽기 위해 작동하는 지금, 그때 나에게 EIO 오류를 제공 읽어 은 이미 다음과 같은 최소한의 구현을 가지고있다. 왜 그런가요?
가 D' 오, 내가 실수로 오픈 라인을 실험하면서 삭제해야합니다 (당신으로 fd 변수에 주목하고 정리가 이미 있음). 고마워, 또 다른 한 쌍의 눈은 때로는 매우 도움이 될 수 있습니다 :) – gber