Daemonio
(usa Slackware)
Enviado em 02/04/2010 - 10:25h
Bem, não posso responder todas suas perguntas mas quando utilizo o exec, eu o uso para alterar os arquivos descritores padrões (stdin,stdout,stderr) e para criar outros fd's.
Por exemplo: Você tem um arquivo e quer fazer a leitura dele. Há muitas maneiras de fazer isso, mas uma que você pode utilizar é redirecionar o descritor de seu arquivo para stdin. Dessa maneira, toda chamada de algum comando que utilize stdin irá utilizar o arquivo e não a entrada padrão (teclado).
exec 4<&0 #Salva stdin no descritor 4
exec < /etc/passwd #stdin = /etc/passwd
...
read LINHA #Lê uma linha de /etc/passwd e nao de stdin
echo $LINHA
read LINHA #Lê outra linha de /etc/passwd
....
exec 0<&4 #Recupera stdin
exec 4<&- #Fecha o fd temporario 4
Outro exemplo:
Redirecionar stdout para um arquivo.
exec 4<&1 #Salva stdout em 4
exec > saida.txt #stdout = saida.txt
...
cat /etc/passwd #Nao mostra nada na tela. Manda tudo para saida.txt
...
exec 1<&4 #Recupera stdout
exec 4<&- #Fecha o fd 4
cat saida.txt #Conteudo do /etc/passwd
Confesso que só utilizei o exec para fins didáticos mesmo, nada na prática. :(
Como você pode ver, todos os processos acima podem ser implementados sem a ajuda do exec.
Difícil mesmo é achar uma aplicação específica para ele, a não ser para criar novos arquivos descritores que eu acho que só o exec faz isso:
$ exec 4</etc/passwd #Cria o fd 4 associado a /etc/passwd
read -u 4 LINHA # Ler a primeira linha do fd 4 (opção -u)
echo $LINHA #Mostra a primeira linha de /etc/passwd
Dessa meneira, você pode ter vários arquivos associados por números, que talvez melhore muito a programação dependendo do caso (Melhor lidar com números do que nomes de arquivos gigantes, por exemplo)
Referência:
http://doc.async.com.br/abs-0.3/HTML/io-redirection.html
Espero ter ajudado.
t+