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.