O caminho atual de um processo

2

Suponha que eu escreva um programa, que produza um arquivo sob um caminho relativo (em oposição a um caminho completo / absoluto) - digamos, o caminho atual.

Depois eu compilo e armazeno o executável sob algum diretório path1 .

  1. Agora eu corro o executável, enquanto estou sob uma dir diferente path2 . o executável produzirá um arquivo em path2 em vez de path1 .

    Eu me pergunto por que o executável não escreve um arquivo em path1 ? Em outras palavras, por que o "caminho atual" é path2 não path1 ?

  2. Se durante o tempo de execução, o executável abrir um arquivo armazenado em path3 , por que o caminho atual se torna path3 , embora eu execute o executável em path2 e o executável tenha sido armazenado em path1 ?

Como o SO atribui e altera o caminho atual de um processo durante o tempo de execução?

    
por Tim 10.07.2014 / 07:22

1 resposta

3

Pergunta 1 : Por que o diretório em que um programa está instalado não é o diretório inicial do processo durante a execução do programa?

Na verdade, o caminho de instalação de um programa é irrelevante. O que importa é o caminho atual do processo pai . No caso de um programa iniciado a partir de um shell, o processo pai é o próprio shell, portanto, o diretório atual inicial do novo processo é o diretório atual do shell.

Pergunta 2 : Como um processo pode criar um arquivo fora de seu diretório atual?

Existem duas maneiras de fornecer o caminho de um arquivo: caminho absoluto e caminho relativo. Um caminho absoluto é interpretado a partir da raiz do sistema de arquivos ( / ) e começa com uma barra ("/"). Um caminho relativo é interpretado a partir do diretório atual do processo. Portanto, se você tiver dois diretórios, por exemplo /path2 e /path2/path3 , e um processo cujo diretório atual for path2 , ele poderá abrir um arquivo path3/file . Esse caminho é relativo (ele não inicia com uma barra), portanto, é calculado a partir do diretório atual path2 . E, finalmente, o caminho completo do novo arquivo é /path2/path3/file . Portanto, um processo em execução em um determinado diretório pode criar um arquivo fora dele.

Pergunta 3 : Como o SO atribui e altera o caminho atual de um processo durante sua execução?

Um processo pode solicitar ao sistema operacional que altere seu diretório atual pela média da chamada do sistema chdir(2) (desde que ele precise de permissões no novo diretório para ele, etc. etc.). Esse é um mecanismo diferente que não tem nada a ver com a abertura de arquivos. A abertura de arquivos é feita por meio de outra chamada de sistema (a saber, open(2) ).

    
por 10.07.2014 / 09:13

Tags