fbpx
Skip to main content

LINUX AVANZATO 2007

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
18 Anni 7 Mesi fa #44502 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007
CONFERMO FUNZIONA!!
Grazie mille, per la dritta sulla waitpid.
Sulla funzione clone sto strovanda scarsissima documentazione, cmq grazie.

Ecco qui il programma funzionante
www.skynetweb.it/%5C/public%5Cprogetti%5Cclone_e_1s2.c

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
18 Anni 7 Mesi fa #44504 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007
Ah, e grazie mille anche per la mmap!! ;-)

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
18 Anni 7 Mesi fa #44524 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007
Ecco l'esercizio con le directory.
Un solo punto: non capisco perchè prima di uscire mi da Segmentation Fault, sembra quasi che non esegua il return 0.
Un grazie a chi risolverà l'arcano.

#include<stdio.h>
#include<stdlib.h>
#include<signal.h>
#include<unistd.h>
#include<sched.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/mman.h>
#include<errno.h>
#include<sys/wait.h>
#include<string.h>
#include<sys/dir.h>

int main (int argc, char* argv[]){

DIR* dire = opendir(argv[1]);
struct dirent* info;
struct stat* stat_buf;
int max = 0, stat_ret;
char file[256];

while(info = readdir(dire)){
if(info->d_type!=DT_DIR){
stat_ret = stat(info->d_name, stat_buf);
if(stat_ret==0){
printf("%s -> %d Kbyte\n", info->d_name, stat_buf->st_size);
if(stat_buf->st_size > max){
max = stat_buf->st_size;
strcpy(file, info->d_name);
}
}
else
{
printf("Impossibile leggere il file %s\n", info->d_name);
return 0;
}
}
}

if(max!=0){
printf("Il file più grande è %s -> %d Byte\n", file, max);
}
else
{
printf("La directory è vuota\n");
}

closedir(dire);
return 0;
}

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
18 Anni 7 Mesi fa #44526 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007
Ecco come avrei fatto io la prova di laboratorio.
L'ho solo scritto ma non l'ho testato...quindi vedete voi se ci sono problemi.

phpfi.com/230781?lang=c

Ciao belli!

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
18 Anni 7 Mesi fa #44542 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007

Ecco l'esercizio con le directory.
Un solo punto: non capisco perchè prima di uscire mi da Segmentation Fault, sembra quasi che non esegua il return 0.
Un grazie a chi risolverà l'arcano.


Allora, ho provato e c'erano un paio di warning con il gcc4.1 che uso io.
A me non funzionava proprio perchè non avevi allocato memoria per la variabile puntatore struct stat* stat_buf che poi passavi alla funzione stat.

Cambiato quello, funziona bene senza segmentation fault.
Comunque, secondo me, questa soluzione non risolve completamente il problema perchè quando si chiama la funzione stat, le si dovrebbe passare il percorso assoluto del file e non con quello relativo. Nel caso in cui si esegue il programma passando una directory diversa dalla corrente, il programma non funziona correttamente.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
18 Anni 7 Mesi fa #44546 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007
Vero, grazie per il suggerimento.

Si prega Accedi o Crea un account a partecipare alla conversazione.