A abertura de um arquivo regular por 'open ()' em um programa C cria um arquivo '/ proc / $ pid / fd / $ number'?

0

No Linux, eu escrevo um programa em C, que chama open() para abrir um arquivo regular arquivo e retornar um descritor de arquivo.

Quando executo o executável compilado do programa C, é correto que o processo crie um arquivo /proc/$pid/fd/$number , onde

  • $pid é o pid do processo e
  • $number é o mesmo inteiro que o descritor de arquivo retornado por open() no programa C?

O /proc/$pid/fd/$number é um link simbólico para o arquivo normal aberto por open() no programa C?

    
por Tim 28.12.2016 / 10:06

1 resposta

4

Por que não experimentar?

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

int main(int argc, char **argv) {
  int fd = open("333222.c", 0);
  printf("%d\n", fd);
  sleep(120);
  if (fd >= 0) {
    close(fd);
  }
}

Salvar como 333222.c , compilá-lo e executá-lo:

gcc -o 333222 333222.c
./333222 &

Isso mostrará o pid e o descritor de arquivo (3); use o primeiro para listar os descritores de arquivo:

ls -l /proc/.../fd

e você verá o descritor de arquivos 3 vinculado a 333222.c .

Para responder à sua pergunta, /proc/$pid/fd/$fd corresponde ao descritor de arquivo $fd dentro do programa em execução com pid $pid , conforme retornado por open(2) e assim por diante, e está de fato vinculado ao arquivo real que foi aberto (se ainda estiver lá).

    
por 28.12.2016 / 10:21