Pergunta

questão de suporte

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.

Foi útil?

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 argumento meta_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 para rl_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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top