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)
).