2013-04-16 6 views
0

올바른 결과가 기대되는 것은 아닙니다. 다른 단말기에tty에 출력을 보내면 예상 결과가 나타나지 않습니다.

$ man less 

: man less 인화 질문과 개행 실행보다는 맨의 표시를 종료되는 시점에서 단말

$ ps u 
# Find that pid of less is 45783 
$ lsof -p 45783 
COMMAND PID USER FD TYPE    DEVICE SIZE/OFF NODE NAME 
less 45783 lust cwd DIR    1,4  442  46 /usr/share/man 
less 45783 lust txt REG    1,4 137712 9698 /usr/bin/less 
less 45783 lust txt REG    1,4 600576 9397 /usr/lib/dyld 
less 45783 lust txt REG    1,4 303120384 2911813 /private/var/db/dyld/dyld_shared_cache_x86_64 
less 45783 lust 0 PIPE 0xffffff8025bf38c0  16384 
less 45783 lust 1u CHR    16,2 0t82970  763 /dev/ttys002 
less 45783 lust 2u CHR    16,2 0t82970  763 /dev/ttys002 
less 45783 lust 3r REG    1,4  4589 286688 /private/etc/man.conf 
less 45783 lust 4r CHR    2,0  0t0  306 /dev/tty 
$ echo "q" > /dev/ttys002 

.

원시 "q"를 보내려면 어떻게해야합니까? 파이핑이 작동하지 않으면 "zsh : permission denied :/dev/ttys002"가 표시됩니다. echocat으로 바꾸고 입력해도 작동하지 않았습니다.

+0

오히려 청각 장애에 입력 주입에 말한다 당신이 당신의 질문의 제목으로 청각 장애에 출력을 전송에 관심이없는 것 같다! – Celada

+0

@Celada 송신 ** 프로그램에서 출력 ** * 터미널 세션에 대한 입력으로 *? –

+0

실제로. 앞에서 말한 것처럼 출력을 터미널에 보내는 것과는 매우 다릅니다! – Celada

답변

0

내가 원하는 것은 코 프로세스입니다. zsh가 지원합니다.

coproc bc -l 
print -p 1 + 1 
read -p answer 
echo $answer 
2 

이것은 당신이 시도 write -p

를 통해 자식 프로세스의 표준 입력을 제어 할 수 있습니다 : 당신이 원하는대로 수정, 코드의 단지 샘플 비트입니다. 그것은/dev/pty3 또는 무엇이든간에 터미널의 입력 대기열에 기록합니다. 루트로만 실행하십시오. 사용 : - 매우 다른 것 ./puttty는/dev/pty3는

int main(int argc, char **argv) 
{             
    int tty = open(argv[1], O_WRONLY|O_NONBLOCK); 
    char ch[80]={0x0}; 
    char *p=NULL; 
    while(fgets(ch, 80, stdin)!=NULL) //Read keyboard input e.g., q<return> 
    { 
     for(p=ch; *p && *p!='\n'; p++) 
     ioctl(tty, TIOCSTI, p); // put each byte into /dev/pty3 input queue.      
    }      
    close(tty); // ctrl-Z ends the program.          
    return 0;           
}  
+0

흥미 롭습니다. 나는 코코크에 대해 몰랐다. 그러나 나는 단지 stdin을 제어 할 필요가있다. (필자가 필요로하는 것이면 파이프를 사용하는 것이 훨씬 편하다.)하지만 페이저 프로그램이 사용하는 대화 형 tty를 실제로 번역하기 위해서다. 이 작업을 수행하는 유일한 합리적인 방법은 호출기 프로그램을 PTY를 통해 생성하는 것입니다. –

+0

stdout, stdin, stderr 중 하나를 다른 프로세스로 삽입 하시겠습니까? 다른 말로하면 "가서"다른 tty로 오는 모든 것을 검사하고 싶습니까? –

+0

예, 들어간 내용을 번역하고 평소에 무엇을 표시하고 싶습니다. 그것은 본질적으로 pseudoterminal pty를 필요로하기 때문에 Perl IO :: Pty :: Easy로 건물을 짓고 있습니다. –

관련 문제