Você pode, mas não é uma boa ideia. Normalmente, os programas começam com três descritores de arquivos abertos:
- 0 é a entrada padrão, em que os comandos que processam o texto de alguma forma lêem a entrada se ela não vier de um arquivo.
- 1 é a saída padrão, para dados normais produzidos por um comando, se os dados não forem explicitamente indo para um arquivo.
- 2 é um erro padrão, para mensagens de diagnóstico que não fazem parte dos dados úteis produzidos pelo comando.
Você pode violar essas convenções e usar mais descritores de arquivos, mas isso significa que seu aplicativo só poderá ser usado diretamente em um ambiente no qual o chamador especificou os descritores de arquivos corretos. Você não poderá testar facilmente isso em seu aplicativo: como os descritores de arquivo 3 e acima não são regulamentados, eles podem ser fechados quando o aplicativo é iniciado (isso pode ser detectado) ou podem estar abertos para algum propósito não relacionado. (isso não pode ser detectado).
A passagem de nomes de arquivos na linha de comando é a maneira normal de especificar vários arquivos de entrada ou saída.
Dito isso, para acessar descritores de arquivos arbitrários:
-
No shell: redirecionar para o número desejado, por exemplo,
IFS= read -r line <&3 printf "%s\n" "$line" >&4
- Em C, chame
read
ouwrite
com qualquer fd desejado ou chamefdopen
para obter um fluxo stdio. -
Em Perl, especifique um redirecionamento de shell como o nome do arquivo a ser aberto para duplicar um descritor de arquivo ou adicione
=
para fazer umfdopen
simples.open IN3, "<&=3"; open OUT4, ">&=4";
- No Python, chame
os.fdopen
.