Problema al acceder a un directorio en C

  • 3 Respuestas
  • 1266 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Frijolito

  • *
  • Underc0der
  • Mensajes: 81
  • Actividad:
    0%
  • Reputación 1
    • Ver Perfil

Problema al acceder a un directorio en C

  • en: Noviembre 24, 2018, 09:02:58 pm
Hola, tengo un pequeno problema que llevo mucho todo el dia tratando de solucionar.  Lo que pasa es que intento acceder a un directorio y me manda un error violación de segmento voy a dejar una foto:

Tambien ejecute el programa como "sudo ./xor" y tampoco funciona probablemente  sea un error pequeno pero de verdad no logro encontrar el porque.

Gracias de antemano.
Código: (c) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <string.h>
#include <errno.h>

void Direc();
void FileSize(char *fileN);
void Cifrar(char *fileN);

int main(){

Direc();
return 0;
}

void Cifrar(char *fileN){

char c;
int clave;

clave = rand()% 255 + 0;

FILE *file;
file = fopen(fileN, "rb+");

int i = 0;
while((c = fgetc(file)) != EOF){
fseek(file, i, SEEK_SET);
i++;
fputc((c ^ clave), file);
}
i = 0;
fclose(file);
printf("   Crifrado. \n");
}

void Direc(){

char *ndir;
char *p=getenv("USER");

printf(" [>>] Introduca el directorio: \n");
printf("  %s~$: ",p);
scanf("%s", ndir);
printf("%s\n",ndir);

DIR *dir;
struct dirent *ent;
dir = opendir(ndir);

if(dir == NULL){
printf("  [>>] Error al buscar el directorio \n");
}

while((ent = readdir(dir)) != NULL){
if((strcmp(ent->d_name, ".") != 0) && (strcmp(ent->d_name, "..") !=0) ){
}
FileSize(ent->d_name);
}
}

void FileSize(char *fileN){

long ftam = -1;
FILE *file;
file = fopen("fileN", "r");

if(file){
fseek(file, 0L, SEEK_END);
ftam = ftell(file);
fclose(file);
printf("%30s (%ld bytes)",fileN, ftam);
}
Cifrar(fileN);
}
« Última modificación: Noviembre 27, 2018, 08:11:03 pm por xyz »

Desconectado Solid Water

  • *
  • Underc0der
  • Mensajes: 146
  • Actividad:
    3.33%
  • Country: 00
  • Reputación 6
  • (:{
    • Ver Perfil

Re:Problema al acceder a un directorio en C

  • en: Noviembre 24, 2018, 09:46:06 pm
Frijolito hasta el lunes no estoy en casa y no puedo probar nada, pero quería decirte algo.
En esta parte del código:

 
Código: (c) [Seleccionar]
while((ent = readdir(dir)) != NULL){
                if((strcmp(ent->d_name, ".") != 0) && (strcmp(ent->d_name, "..") !=0) ){
                }
                FileSize(ent->d_name);
        }

Tu quieres decir que si es el . o el .. el archivo no haga nada pero sin embargo de todas modos llamas al FileSize, por que debería ser así:

   
Código: (c) [Seleccionar]
while((ent = readdir(dir)) != NULL){
                if((strcmp(ent->d_name, ".") != 0) && (strcmp(ent->d_name, "..") !=0) ){
                 
                      FileSize(ent->d_name);
                }
               
        }

Saludos recién el lunes a la tarde/noche podría probarlo.
Igual no sé si es eso lo que querías hacer.

« Última modificación: Noviembre 24, 2018, 09:48:43 pm por solid water »

Desconectado Frijolito

  • *
  • Underc0der
  • Mensajes: 81
  • Actividad:
    0%
  • Reputación 1
    • Ver Perfil

Re:Problema al acceder a un directorio en C

  • en: Noviembre 24, 2018, 10:21:28 pm
Frijolito hasta el lunes no estoy en casa y no puedo probar nada, pero quería decirte algo.
En esta parte del código:

 
Código: (c) [Seleccionar]
while((ent = readdir(dir)) != NULL){
                if((strcmp(ent->d_name, ".") != 0) && (strcmp(ent->d_name, "..") !=0) ){
                }
                FileSize(ent->d_name);
        }

Tu quieres decir que si es el . o el .. el archivo no haga nada pero sin embargo de todas modos llamas al FileSize, por que debería ser así:

   
Código: (c) [Seleccionar]
while((ent = readdir(dir)) != NULL){
                if((strcmp(ent->d_name, ".") != 0) && (strcmp(ent->d_name, "..") !=0) ){
                 
                      FileSize(ent->d_name);
                }
               
        }

Saludos recién el lunes a la tarde/noche podría probarlo.
Igual no sé si es eso lo que querías hacer.

Gracias no me di cuenta de ese error pero aun así no deja acceder a ningún directorio directorio y no se porque es

Desconectado Solid Water

  • *
  • Underc0der
  • Mensajes: 146
  • Actividad:
    3.33%
  • Country: 00
  • Reputación 6
  • (:{
    • Ver Perfil

Re:Problema al acceder a un directorio en C

  • en: Noviembre 25, 2018, 11:31:30 pm
Frijolito le arreglé varias cosas, ya no crashea y funciona el cifrado, lo que no está devolviendo, es el filesize.
Pero el código corre y cifra.
Lo del FileSize te toca a vos.

Código: (c) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <string.h>
#include <errno.h>
 
void Direc();
void FileSize(char  fileN[200]);
void Cifrar(char fileN[200]);
 
int main(){
 
        Direc();
        return 0;
}
 
void Cifrar(char fileN[200]){
 

        char c;
        int clave;
 
        clave = rand()% 255 + 0;


        FILE *file;
        file = fopen(fileN, "rb+");
 
        int i = 0;
        while((c = fgetc(file)) != EOF){
                fseek(file, i, SEEK_SET);
                i++;
                fputc((c ^ clave), file);
        }
        i = 0;
        fclose(file);
        printf("   Crifrado. \n");

}
 
void Direc(){

        char ndir[200];
        char *p=getenv("USER");
 
        printf(" [>>] Introduca el directorio: \n");
        printf("  %s~$: ",p);
        scanf("%s", ndir);

        printf("%s\n",ndir);
 
        DIR *dir;
        struct dirent *ent;
        dir = opendir(ndir);
 
        if(dir == NULL){
                printf("  [>>] Error al buscar el directorio \n");
        }
 
        while((ent = readdir(dir)) != NULL){
                if((strcmp(ent->d_name, ".") != 0) && (strcmp(ent->d_name, "..") !=0) ){

                        printf("%s", ent->d_name);
                        strcat(ndir,ent->d_name);       
                        FileSize(ndir);
               }

        }
}
 
void FileSize(char fileN[200]){
 
        long ftam = -1;
        FILE *file;
        file = fopen("fileN", "r");
 
        if(file){
                fseek(file, 0L, SEEK_END);
                ftam = ftell(file);
                fclose(file);
                printf("%30s (%ld bytes)",fileN, ftam);
        }else{
                printf("no file \n");
        }
        Cifrar(fileN);
}

Después si querés hablamos por MP.

Saludos,