Escrevendo para stdout, exceto para o redirecionamento de saída C

5

Eu tenho que fazer um aplicativo simples para a escola.

Eu tenho que escrever argumentos um por linha no terminal, e retornar no stdout as escolhas do usuário.

Por exemplo, escrevo cat my_app main.c main.h , se o usuário escolher main.c , retornarei main.c para cat. O problema é que, se eu escrever o menu na saída padrão (também conhecido como STDOUT_FILENO), eu o retorno para cat . Eu poderia escrever meu menu no STDERR, mas é um pouco feio.

Eu realmente não sei como usar dispositivos / arquivos como /dev/tty* ou /dev/pty* , mas eu sinto que eu poderia usá-los para escrever algo no terminal sem ter que escrevê-lo em STDOUT ou STDERR.

Basicamente, eu quero abrir uma nova saída, que seria mostrada pelo terminal (STDOUT, STDERR, MYOUT).

Não sei se expliquei corretamente.

    
por Max13 25.11.2011 / 00:04

1 resposta

5

Para criar um aplicativo interativo, você pode abrir /dev/tty , ele retornará um descritor de arquivo para o terminal de controle:

int ttyfd = open("/dev/tty", O_RDWR);

Você pode usá-lo em vez de STDIN_FILENO ou STDOUT_FILENO (esses podem ser redirecionados para algo diferente do terminal quando o programa é iniciado).

Aqui está um exemplo:

#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main() {
  int ttyfd = open("/dev/tty", O_RDWR);
  printf("fd: %d\n", ttyfd);
  write(ttyfd, "hello tty!\n", 11);
  return 0;
}

Quando invocado com ./test >out , deve imprimir a mensagem de saudação no terminal e algo como fd: 3 no arquivo out .

    
por 25.11.2011 / 00:19

Tags