【发布时间】:2014-03-05 14:21:14
【问题描述】:
下面的简化代码由后台线程执行。线程一直运行,直到他被告知退出(通过用户输入)。
在下面的代码中,我删除了一些错误检查以提高可读性。即使有错误检查,代码也能正常工作,并且创建和/或打开主从。
...
int master, slave;
char *slavename;
char *cc;
master = posix_openpt(O_RDWR);
grantpt(master);
unlockpt(master);
slavename = ptsname(master);
slave = open(slavename, O_RDWR);
printf("master: %d\n",master);
printf("slavename: %s\n",slavename);
在我的机器上输出如下:
master: 3
slavename: /dev/pts/4
所以我认为在我的程序运行时使用命令xterm -S4/3 (4 = pt-slave, 3 = pt-master) 打开一个 xterm 应该为创建的伪终端打开一个新的 xterm 窗口。但是 xterm 只是开始运行而没有给出错误或任何进一步的信息,但根本没有打开一个窗口。对此有何建议?
编辑:
现在有了 Wumpus Q. Wumbley 的帮助,xterm 可以正常启动,但我无法将任何输出重定向到它。我试过了:
dup2(slave, 1);
dup2(slave, 2);
printf("Some test message\n");
并使用fopen 打开从站,然后使用fprinf。两者都不起作用。
【问题讨论】:
-
您的 xterm 进程是否是上述程序的子进程,是否继承了文件描述符 3?
-
不,不是(还没有)。出于测试目的,我想从第二个 shell 手动运行它。
-
好吧,如果 xterm 进程实际上没有具有文件描述符 3,则指定 3 作为要使用的 dfile 描述符对您没有好处。