Como usar o pipe para aplicar um texto a um programa

1

Meu instrutor diz para usar um pipe para aplicar um arquivo de texto, que consiste em uma lista de casos de teste, a um programa de trabalho que pega o caso de teste do arquivo de entrada. Digamos que eu tenha

test_cases.txt
my_program //my java program after compliation

e quando eu fiz isso

java my_program | test_cases.txt

[1]+ Stopped               java my_program | test_cases.txt

Não sabe como usar o pipe ...

    
por 夢のの夢 06.02.2017 / 04:51

1 resposta

5

Primeiro de tudo, um pipe conecta dois processos , não arquivos (incluindo arquivos de texto), de tal forma que a saída de um vai para a entrada do outro. A presunção é que o processo "gerando" a saída envia para STDOUT , que se torna a fonte para o pipe, e que o processo "recebendo" a entrada lê a partir de STDIN , que se torna o destino do pipe. Você não pode conectar um pipe a um arquivo de texto ou qualquer outro arquivo apenas a processos.

Em segundo lugar, quando se usa um cano, o processo no lado esquerdo do cano é aquele que usa STDOUT , e o processo no lado direito do cano usa STDIN . Portanto, seu comando tentado estaria tentando enviar a saída de my_program para o canal, não lendo a partir dele.

Se você apresentou corretamente as instruções que lhe foram dadas, então não pode funcionar de qualquer maneira. As instruções terminam com "... um programa de trabalho pega os casos de teste do arquivo de entrada". Se o programa recebe entrada de um arquivo, então não está lendo de STDIN , e ignoraria os dados do pipe de qualquer maneira.

Para fazê-lo funcionar com um pipe, my_program precisa ser escrito para ler o STDIN , como se você esperasse que você digitasse os casos de teste manualmente em um prompt. Então você poderia reescrever a linha de comando como

cat text_cases.txt | jave my_program

cat é um processo que lerá o arquivo de texto e enviará seu conteúdo para STDOUT , então my_program "lerá" os dados de STDIN usando o canal em vez de você digitando manualmente. Como não sei como o java se conecta com pipes, isso se baseia na presunção de que ele se comportará de maneira padrão, já que o instrutor pediu para você usar esse método.

IMHO seria melhor, como em menos uso de recursos, usar o redirecionamento do que um pipe.

java my_program < test_cases.txt

Ou seja, a menos que este seja um passo que será incluído em uma cadeia maior de processos mais adiante no curso em que o uso de um tubo será necessário.

    
por 06.02.2017 / 06:59