invocando menos aplicação de realidade de GNU
Pergunta
Bit. Desculpas para isso. Tenho uma aplicação relacionada com GNU readline. A aplicação pode invocar comandos de concha (semelhantes a invocar tclsh usando invólucro readline). Quando tento invocar o Linux comando less, eu recebo o seguinte erro: Suspender (saída tty)
Eu não sou um especialista em torno de questões de terminais. Eu tentei google mas não encontrou resposta. Será que qualquer um sabe como resolver este problema?
Graças.
Solução
Enquanto contraditório pode ser parado à espera de entrada (alguns OSs e conchas dão Parado / Suspenso (saída tty) quando você poderia esperar para se referir a (entrada tty)). Isso caberia o comportamento usual de menos quando se pára no final (o que ele pensa que é) o comprimento da tela.
Você pode usar gato ou cabeça em vez disso? ou alimentar menos alguma entrada? ou olhar para o menos / info páginas para ver que opções para menos pode atender às suas necessidades (por exemplo w, z, F)?
Outras dicas
Você provavelmente precisará investigar a funções rl_prep_terminal()
e rl_deprep_terminal()
documentado no readline manual:
Função:
void rl_prep_terminal(int meta_flag)
Modifique as configurações do terminal para o uso do Readline, então
readline()
pode ler um único caractere em um momento a partir do teclado. O argumentometa_flag
deve ser diferente de zero se Readline deve ler a entrada de oito bits.Função:
void rl_deprep_terminal(void)
desfazer os efeitos de
rl_prep_terminal()
, deixando o terminal no estado em que estava antes da chamada mais recente pararl_prep_terminal()
.
O programa less
é provável que ficar confuso se o terminal já está no modo especial usado pela biblioteca Readline e tenta ajustar o terminal em um modo equivalente. Este é um problema comum para os programas que o trabalho com a biblioteca de maldições, ou outras bibliotecas semelhantes que ajustam o estado terminal e executar outros programas que também fazem isso.
O aplicativo readline está se fazendo o aplicativo controlar para o seu tty.
Quando você invocar menos de dentro do aplicativo, ele quer estar no controle do tty também.
Se você está tentando invocar menos em seu aplicativo para exibir um arquivo para o usuário,
pretende definir o novo processo fork'd em que é grupo de processo próprio antes de chamar exec.
Você pode fazer isso com setsid () . Então, quando menos tcsetpgrpp call (), ele não vai ficar
lançada no backgroud com SIGTTOU.
Ao menos acabamentos, você vai querer restaurar o grupo de processos foregroud com tcsetpgrp () , também.