Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

244
Vistas
Linux/ Abrir directorio como un archivo

He estado leyendo Brian Kernighan y Dennis Ritchie - El lenguaje de programación C y el capítulo 8.6 trata sobre la lista de directorios en UNIX OS. Dicen que todo e incluso el directorio es un archivo. ¿Esto significa que debería poder abrir el directorio como un archivo? Lo probé usando las funciones de stdio y no funcionó. Ahora, lo estoy probando con las funciones del sistema UNIX. Por supuesto, no estoy usando UNIX, estoy usando Ubuntu Linux. Aquí está mi código:

 #include <syscall.h> #include <fcntl.h> int main(int argn, char* argv[]) { int fd; if (argn!=1) fd=open(argv[1],O_RDONLY,0); else fd=open(".",O_RDONLY,0); if (fd==-1) return -1; char buf[1024]; int n; while ((n=read(fd,buf,1024))>0) write(1,buf,n); close (fd); return 0; }

Esto no escribe nada incluso cuando argn es 1 (sin parámetros) y estoy tratando de leer el directorio actual. ¿Alguna idea/explicación? :)

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Los archivos también se denominan regular files para distinguirlos de special files .

Directorio o no un regular file . El special file más común es el directorio. El diseño de un archivo de directorio está definido por el sistema de archivos utilizado.

Así que usa opendir para abrir el directorio.

over 4 years ago · Santiago Trujillo Denunciar

0

La respuesta de Nachiket es correcta (como de hecho lo es sujin) pero no aclaran el misterio de por qué open obras y no read . Por curiosidad, hice algunos cambios en el código dado para averiguar exactamente qué estaba pasando.

 #include <fcntl.h> #include <stdio.h> #include <errno.h> int main(int argc, char* argv[]) { int fd = -1; if (argc!=1) fd=open(argv[1],O_RDONLY,0); else fd=open(".",O_RDONLY,0); if (fd < 0){ perror("file open"); printf("error on open = %d", errno); return -1; } printf("file descriptor is %d\n", fd); char buf[1024]; int n; if ((n=read(fd,buf,1024))>0){ write(1,buf,n); } else { printf("n = %d\n", n); if (n < 0) { printf("read failure %d\n", errno); perror("cannot read"); } } close (fd); return 0; }

El resultado de compilar y ejecutar esto:

 file descriptor is 3 n = -1 read failure 21 cannot read: Is a directory

Eso lo resuelve, aunque hubiera esperado que open fallara, ya que la función correcta del sistema para abrir directorios es opendir() .

over 4 years ago · Santiago Trujillo Denunciar

0

Aunque todo en Unix es un archivo (también un directorio), el concepto de tipo de archivo está presente en Unix y se aplica a todos los archivos. hay tipos de archivos como archivos regulares, directorios, etc. y ciertas operaciones y funciones están permitidas/presentes para cada tipo de archivo.

En su caso, readdir es aplicable para leer el contenido del directorio.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda