Maneira cruzada da maneira de testar se um arquivo é um diretório
-
25-09-2019 - |
Pergunta
Atualmente, tenho algum código como (condensado e removi um monte de verificação de erros):
dp = readdir(dir);
if (dp->d_type == DT_DIR) {
}
Isso funciona muito bem na minha máquina Linux. No entanto, em outra máquina (parece Sunos, SPARC):
SunOS HOST 5.10 Generic_127127-11 sun4u sparc SUNW,Ultra-5_10
Recebo o seguinte erro no horário de compilação:
error: structure has no member named `d_type'
error: `DT_DIR' undeclared (first use in this function)
Eu pensei o dirent.h
O cabeçalho foi cruzado (para máquinas POSIX). Alguma sugestão.
Solução
Ref http://www.nexenta.org/os/porting_codefixes:
A definição de estrutura de estrutura em solaris não contém o
d_type
campo. Você precisaria fazer as alterações da seguinte maneira
if (de->d_type == DT_DIR)
{
return 0;
}
muda para
struct stat s; /*include sys/stat.h if necessary */
..
..
stat(de->d_name, &s);
if (s.st_mode & S_IFDIR)
{
return 0;
}
Desde stat
também é padrão POSIX, ele deve ser mais uma plataforma cruzada. Mas você pode querer usar if ((s.st_mode & S_IFMT) == S_IFDIR)
Para seguir o padrão.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow