Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    255

    programma in c sotto linux

    salve ragazzi posto qui il codice di un esercizio ke nn vuole proprio funzionare...praticamente devo leggere i primi 3 caratteri dispari di ogni file.txt e memorizzare in un buffer e copiare i caratteri del buffer in un file.txt in modo contrario e poi normale...ma nel buffer nn riesco a memorizzarli

    int main(int argc, char *argv[])
    {
    struct stat s,s1;
    struct dirent *dir;
    DIR *d;
    char *nome,c,car;
    int i,n,fd;
    char *buf;
    int esiste=0;
    int fd1;

    d=opendir(argv[1]);
    while((dir=readdir(d))!=NULL)
    {
    stat(dir->d_name,&s);
    nome=dir->d_name;
    if(S_ISREG(s.st_mode))
    {
    if(strstr(dir->d_name,".txt"))
    {
    printf("i file txt esistenti sono: %s\n",nome);
    fd=open(nome,O_RDWR,0666);
    while((read(fd,&c,1))>0)
    {
    for(i=0;i<6;i++)
    {
    if(c%2!=0)
    {
    fd1=open("byteletti.txt", O_RDWR | O_CREAT | O_TRUNC , 0666);
    buf=malloc(s.st_size);
    write(fd1,buf,s.st_size);
    esiste=1;
    }
    }
    }
    }
    }
    }
    if(esiste==1)
    {
    int fd2=open("temp", O_RDWR | O_CREAT | O_TRUNC , 0666);
    fd1=open("byteletti.txt", O_RDWR );
    int lunghezza=lseek(fd1,0,SEEK_END);
    int mezza=lunghezza/2;
    n=lseek(fd1,0,SEEK_SET);
    while(n<=mezza)
    {
    read(fd1,buf,1);
    write(fd2,buf,1);
    lseek(fd1,1,SEEK_CUR);
    }
    n=lseek(fd1,-1,SEEK_END);
    while(n>=mezza)
    {
    read(fd1,buf,1);
    write(fd2,buf,1);
    lseek(fd1,-2,SEEK_CUR);
    }
    }


    }

    grazie

  2. #2
    Se speri in un aiuto ti conviene, racchiudere tra i tag {code} (al posto delle graffe le quadre) e compilabile il codice.

    A prima vista in ogni modo si vede che non controlli possibili errori restituiti da "opendir", "malloc", "open", "write" ecc..

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    255
    scusa non ho capito cosa intendi per chiudere il codice nei tag code
    inoltre siccome programma da poco sotto linux come posso controllare gli errori restituiti da write , malloc e etc.

  4. #4
    Originariamente inviato da s_p_81
    scusa non ho capito cosa intendi per chiudere il codice nei tag code
    e' ben spiegato nel regolamenteo di questo stesso forum
    Originariamente inviato da s_p_81
    inoltre siccome programma da poco sotto linux come posso controllare gli errori restituiti da write , malloc e etc.
    direttamente leggendo la documentazione delle funzioni che utilizzi:

    Ad esempio:
    codice:
    $ man 2 write
    ...
    RETURN VALUES
         Upon successful completion the number of bytes which were written is
         returned.  Otherwise a -1 is returned and the global variable errno is
         set to indicate the error.
    ...

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    255
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<signal.h>
    #include<string.h>
    #include<sys/stat.h>
    #include<sys/file.h>
    #include<sys/wait.h>
    #include<dirent.h>
    #include<fcntl.h>
    #include<unistd.h>
    
    int main(int argc, char *argv[])
    {
    struct stat s,s1;
    struct dirent *dir;
    DIR *d;
    char *nome,c,car;
    int i,n,fd;
    char *buf;
    int esiste=0;
    int fd1;
    
    	d=opendir(argv[1]);
    	while((dir=readdir(d))!=NULL)
    	{
    	stat(dir->d_name,&s);
    	nome=dir->d_name;
    		if(S_ISREG(s.st_mode))
    		{
    			if(strstr(dir->d_name,".txt"))
    			{
    			printf("i file txt esistenti sono: %s\n",nome);
    			fd=open(nome,O_RDWR,0666);
    				while((read(fd,&c,1))>0)
    				{	
    					for(i=0;i<6;i++)
    					{
    						if(c%2!=0)
    						{
    						fd1=open("byteletti.txt", O_RDWR | O_CREAT | O_TRUNC , 0666);
    						buf=malloc(s.st_size);
    						write(fd1,buf,s.st_size);
    						esiste=1;			
    						}	
    					}
    				}
    			}
    		}
    	}
    	if(esiste==1)
    	{
    	int fd2=open("temp", O_RDWR | O_CREAT | O_TRUNC , 0666);
    	fd1=open("byteletti.txt", O_RDWR );
    	int lunghezza=lseek(fd1,0,SEEK_END);
    	int mezza=lunghezza/2;
    	n=lseek(fd1,0,SEEK_SET);
    	while(n<=mezza)
    	{	
    	read(fd1,buf,1);
    	write(fd2,buf,1);
    	lseek(fd1,1,SEEK_CUR);		
    	}	
    	n=lseek(fd1,-1,SEEK_END);
    	while(n>=mezza)
    	{
    	read(fd1,buf,1);
    	write(fd2,buf,1);
    	lseek(fd1,-2,SEEK_CUR);
    	}
    	}
    	}
    grazie dovrò leggermi anche attentamente il man

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    255
    il programma in esecuzione non mi da errori,ma comunque il problema sta nel memorizzare i dati all'interno del buffer...li memorizza strani caratteri e non i caratteri ke dovrebbe memorizzare

  7. #7
    Originariamente inviato da s_p_81
    il programma in esecuzione non mi da errori
    Come fai a dire che non ti da errori? Nel tuo codice non li controlli.

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    255
    quando lo eseguo sotto linux non mi da errori...crea anche il file byteletti è mette i carateri all'interno,ma come ti ho detto prima usa simboli strani.ciao

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    255
    tu non riesci ad eseguirlo sotto windows..provalo per favore.grazie

  10. #10

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.