Como redefinir o descritor de arquivo

0

Eu estava tentando usar o descritor de arquivo para imprimir as linhas no arquivo

#!/usr/bin/ksh
exec 3<&0
exec 0< file.txt
while read LINE
do
   echo “$LINE”
done

e eu terminei meu código, ele imprime a saída como se fosse meu desejo

Esqueci de redefinir o descritor de arquivo de 0

exec 0<&3

o que vai acontecer?

  1. O escopo do descritor durará apenas dentro do programa ou todo o shell unix?
  2. Como chegamos a saber qual valor está mantendo qual descritor de arquivo (imprimindo os valores do descritor de arquivo usando o shell)
  3. Ele redefinirá automaticamente o sistema (AIX) é reiniciado?
por Jeyanthinath 18.03.2014 / 06:03

2 respostas

3

Os descritores de arquivos pertencem a um processo: o processo atual, ou seja. Imediatamente quando você sai de um processo, as atribuições não têm efeito. Até mesmo um subshell (ou qualquer processo filho) que herda os descritores de arquivo, tem a partir do fork () chamar suas próprias cópias dos descritores de arquivos (um descritor de arquivo é apenas um número apontando para um recurso IO no kernel linux). É como arquivos abertos - abrir um arquivo em um processo não o torna aberto para todos e, se você não fechar, o Linux o fecha e limpa quando o processo termina.

    
por 18.03.2014 / 08:52
0

How we come to know which value is holding which file descriptor (printing the values of file descriptor using shell)

Você pode listar todos os descritores de arquivos de um processo usando o /proc filesystem , usando

ls -l /proc/<PID>/fd

Exemplo:

$ ls -l /proc/2218/fd
total 0
lr-x------ 1 setacinq setacinq 64 Mar 14 09:29 0 -> /dev/null
l-wx------ 1 setacinq setacinq 64 Mar 14 09:29 1 -> /dev/null
lr-x------ 1 setacinq setacinq 64 Mar 14 09:29 18 -> pipe:[14524]
l-wx------ 1 setacinq setacinq 64 Mar 14 09:29 19 -> pipe:[14524]
l-wx------ 1 setacinq setacinq 64 Mar 14 09:29 2 -> /home/setacinq/.xsession-errors
lrwx------ 1 setacinq setacinq 64 Mar 14 09:29 22 -> anon_inode:[eventfd]
lrwx------ 1 setacinq setacinq 64 Mar 14 09:29 23 -> anon_inode:[eventfd]
lrwx------ 1 setacinq setacinq 64 Mar 14 09:29 28 -> socket:[14566]
lr-x------ 1 setacinq setacinq 64 Mar 14 09:29 30 -> /usr/share/unity/lenses/commands/commands.lens
lrwx------ 1 setacinq setacinq 64 Mar 14 09:29 32 -> socket:[11753]
lr-x------ 1 setacinq setacinq 64 Mar 14 09:29 35 -> /usr/share/unity/lenses/music/music.lens
lr-x------ 1 setacinq setacinq 64 Mar 14 09:29 36 -> /usr/share/unity/lenses/files/files.lens
lr-x------ 1 setacinq setacinq 64 Mar 14 09:29 37 -> /usr/share/unity/lenses/applications/applications.lens
lr-x------ 1 setacinq setacinq 64 Mar 14 09:29 38 -> /usr/share/unity/lenses/video/video.lens
lr-x------ 1 setacinq setacinq 64 Mar 14 09:29 8 -> anon_inode:inotify
lrwx------ 1 setacinq setacinq 64 Mar 14 09:29 9 -> /home/setacinq/.config/compiz-1/compizconfig/done_upgrades
    
por 18.03.2014 / 09:25