Gracias, la funcion strcmp la entiendo, pero de que me sirve, o para que se compara el nombre del fichero (d_name) con la cadena "." y con ".." ... como podriamos traducir eso al lenguaje natural?
Sabras que . es el directorio actual, y .. el directorio padre del actual, no?
Habria que ver algo mas del codigo, pero asi de entrada parece que esta mirando que en la string d_name de la estructura dp, haya . o .. y si lo hay, crea una string "algo/otroalgo", en el sprintf().
Puedes poner un pedazo mas, anterior a eso, o algo?
Pues tiene pinta de ser el típico bucle que recorre las entradas de un directorio (en este caso para hacer un stat sobre cada una), ignorando las entradas que se refieren al directoria actual y al directorio padre.
4eVaH
Chaos everywhere
3.857 mensajes desde jul 2006 en Mas a la Izquierda.
JanKusanagi escribió:Sabras que . es el directorio actual, y .. el directorio padre del actual, no?
Habria que ver algo mas del codigo, pero asi de entrada parece que esta mirando que en la string d_name de la estructura dp, haya . o .. y si lo hay, crea una string "algo/otroalgo", en el sprintf().
Puedes poner un pedazo mas, anterior a eso, o algo?
Vale, no sabia que para C . tb era el directorio actual y .. el padre.... ahora todo mas claro, ya entiendo el resto del código. Gracias y salu2
4eVaH escribió:Vale, no sabia que para C . tb era el directorio actual y .. el padre.... ahora todo mas claro, ya entiendo el resto del código.
No es que sea "para C", es para cualquier funcion que se entienda con el sistema de archivos... igual que "/" sera "/" o "/home" sera "/home", pues "." es el directorio actual, etc
/* Formamos la ruta correspondiente al fichero de la entrada de directorio que estamos procesando */
if (strcmp (dp->d_name, ".") && strcmp(dp->d_name, "..")) { sprintf(fichero, "%s/%s", dir, dp->d_name); rdo = stat (fichero, &statbuf);
}
Lo que hace ese if ya te lo han contado... lo que si es cierto es que quien haya escrito eso no sabe muy bien qué está haciendo... y es una pena. Hay una posibilidad de desbordar el buffer 'fichero' y eso es malo
¿ De dónde lo has sacado ?
- ferdy
4eVaH
Chaos everywhere
3.857 mensajes desde jul 2006 en Mas a la Izquierda.
/* Formamos la ruta correspondiente al fichero de la entrada de directorio que estamos procesando */
if (strcmp (dp->d_name, ".") && strcmp(dp->d_name, "..")) { sprintf(fichero, "%s/%s", dir, dp->d_name); rdo = stat (fichero, &statbuf);
}
Lo que hace ese if ya te lo han contado... lo que si es cierto es que quien haya escrito eso no sabe muy bien qué está haciendo... y es una pena. Hay una posibilidad de desbordar el buffer 'fichero' y eso es malo
¿ De dónde lo has sacado ?
- ferdy
Es la solución a un examen de Laboratorio de sistemas operativos (Programación C en Unix) de la titulación de Ingeniería informática de la universidad de sevilla... asi está el patio parece ser...
Gracias a todos.
PD: Ferdy, te puedo mandar los examenes si quieres echarles un ojo, aunque no se si te interesará mucho.
Es la solución a un examen de Laboratorio de sistemas operativos (Programación C en Unix) de la titulación de Ingeniería informática de la universidad de sevilla... asi está el patio parece ser...
Entonces, si te interesan estas cosas, intenta aprenderlas en otro sitio...
PD: Ferdy, te puedo mandar los examenes si quieres echarles un ojo, aunque no se si te interesará mucho.
Son las 5:35 de la mañana... y acabo de llegar un poco "tocado" por el amigo etanol así que esta pregunta es posible que quede para linchamiento público, pero...
if (strcmp (dp->d_name, ".") && strcmp(dp->d_name, ".."))
¿Cómo podría ser 'dp->d_name' igual a '.' y '..' al mismo tiempo?
Ya digo... mañana cuando me levante me lo replanteo, pero bueno, os lo dejo para reírse un rato.
Cobo escribió:Son las 5:35 de la mañana... y acabo de llegar un poco "tocado" por el amigo etanol así que esta pregunta es posible que quede para linchamiento público, pero...
if (strcmp (dp->d_name, ".") && strcmp(dp->d_name, ".."))
¿Cómo podría ser 'dp->d_name' igual a '.' y '..' al mismo tiempo?
Ya digo... mañana cuando me levante me lo replanteo, pero bueno, os lo dejo para reírse un rato.
¡Talué!
No, la condición es que tanto strcmp(dp->d_name, ".") como strcmp(dp->d_name, "..") devuelvan un valor distinto de 0, es decir, que no haya encuentro alguno en las comparaciones.