Ir para o conteúdo
ricardoneves93

Erro em código programação linux

Mensagens Recomendadas

ricardoneves93

boas estou a ter um problema de segmentation fault nesta função, o que esta função faz é receber dois directorios e fazer uma copia dos ficheiros que estao no directorio especificado no 1º argumento para o directorio especificado no 2º argumento.

void copyFiles(char *initFolder, char *InsideBackup)
{
struct dirent *files;
struct stat buf;
DIR *dp;
char path[1000];
char FileName[512];
char destFileDir[1024];
char srcFileDir[1024];
strcpy(path, initFolder);
int fdSrc, fdDest;
unsigned char c;
unsigned int len_path_copia;
char *path_copia;

strcpy(srcFileDir, getcwd(srcFileDir, strlen(srcFileDir)));
printf(srcFileDir);
if((dp=opendir(srcFileDir)) == NULL)
	perror("dir");
 chdir(srcFileDir);

while((files = readdir(dp)) != NULL)
{
 if(stat(files->d_name, &buf) < 0)
 {
printf("BAD LSTAT\n");

 }
 if(S_ISREG(buf.st_mode) != 0)
 {
  if((strcmp(files->d_name,".") != 0) && (strcmp(files->d_name,"..") != 0))
  {
//copy
//printf("%s\n", "OLA");
len_path_copia=strlen(InsideBackup);
len_path_copia+=1+strlen(files->d_name);
path_copia=(char *)malloc(len_path_copia*sizeof(char));
strcpy(path_copia,InsideBackup);
strcat(path_copia,files->d_name);
printf("Copying %s in %s\n",files->d_name,path_copia);
if ( (fdDest=open(path_copia,O_CREAT|O_TRUNC|O_WRONLY,(buf.st_mode &S_IRWXU)|(buf.st_mode &S_IRWXG)|(buf.st_mode &S_IRWXO) ) ) <0 )
{
  printf("BAD OPEN %s\n",path_copia);
}
if ( (fdSrc=open(files->d_name,O_RDONLY))<0 )
{
  printf("BAD OPEN %s\n",files->d_name);
}

while (read(fdSrc,&c,1)==1)
{
  write(fdDest,&c,1);
}
close(fdSrc);
close(fdDest);
free(path_copia);

  }
  }

 }
 chdir("..");
 closedir(dp);
}

Editado por ricardoneves93

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Primeiro erro:

char srcFileDir[1024];
/* ... */
strcpy(srcFileDir, getcwd(srcFileDir, strlen(srcFileDir)));

Ao definires o array ele está cheio de lixo. Não podes fazer "strlen(<ARRAY_COM_LIXO>)".

Além disso, a função getcwd() já escreve no endereço passado: não precisas do strcpy().

Não pesquisei mais erros ...


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.