O kernel do OS X proíbe as operações de read(2)
nos diretórios , portanto, você nunca poderá usar ferramentas de espaço do usuário para ler entradas de diretórios diretamente.
Se você quiser ler as entradas de diretório do espaço do usuário, você precisará abrir o dispositivo de bloco subjacente diretamente, ler seus superblocos, encontrar o inode raiz, ler as entradas para encontrar o próximo diretório na cadeia recursivamente para encontrar o diretório em que você está interessado, e então você pode ler as entradas do diretório. Você irá, em essência, escrever um driver do sistema de arquivos do espaço do usuário para fazer essa tarefa.
Havia muito que era inteligente com os antigos sistemas Unix, mas esta era definitivamente uma parte estranha - a única maneira de criar diretórios naqueles dias era via o comando mkdir(1)
, que era setuid-root, porque a criação de diretórios tinha que ser feita através da chamada do sistema mknod(2)
. Então, programas rotineiramente chamam system("mkdir /path/to/foo"); chdir("/path/to/foo");
para criar um novo diretório.