好的,我有问题。我必须使用execlp
获取程序的输出,并使输出直接转到文件。问题是如果程序在tty中运行,程序只会输出某些信息(我猜它会调用isatty(3)
)。
这是我到目前为止的代码
void main(){
int fd = open("file", O_WRONLY | O_CREAT | O_TRUNC, 0755);
close(1);
dup(fd);
execlp("program","program",NULL);
close(fd);
}
我不想使用script
(有效)等操作系统命令。
所以问题是,我怎么能“欺骗”程序认为它正在写入tty?
答案 0 :(得分:6)
使用“pty”(伪终端)作为输出。 see this question了解详情。
Rachid Koucha撰写了一篇冗长的文章,解释了如何使用ptys的详细信息:Using pseudo-terminals (pty) to control interactive programs
停止阅读这里的文字只是为了阻止愚蠢的SO算法将我的答案变成评论。当软件比我更聪明时,我讨厌它: - (