Dennis Ritchie menciona em «A Evolução do Sistema Unix de Compartilhamento de Tempo» que open
e close
, juntamente com read
, write
e creat
estavam presentes no sistema desde o início.
Eu acho que um sistema sem open
e close
não seria inconcebível, mas acredito que isso complicaria o design.
Você geralmente deseja fazer várias chamadas de leitura e gravação, não apenas uma, e isso provavelmente é verdade especialmente naqueles computadores antigos com RAM muito limitada na qual o UNIX se originou. Ter um identificador que mantenha a posição atual do arquivo simplifica isso. Se read
ou write
retornassem o identificador, eles teriam que retornar um par - um identificador e seu próprio status de retorno. A parte do identificador do par seria inútil para todas as outras chamadas, o que tornaria esse arranjo estranho. Deixar o estado do cursor no kernel permite melhorar a eficiência não apenas pelo buffering. Há também algum custo associado à pesquisa de caminho - ter uma alça permite que você pague apenas uma vez. Além disso, alguns arquivos na visão de mundo do UNIX não têm sequer um caminho de sistema de arquivos (ou não - agora eles fazem com coisas como /proc/self/fd
).