Newsgroup: it.comp.lang.c
Titolo: Grandezza file

avete delle info su come controllare se un file
e a zero byte, con djgpp o mingw.
Grazie
Ciao

 djgpp o mingw.
Usando stat()/fstat() oppure lseek()
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   < 
http://giovanni.homelinux.net/
 >

 e a zero byte, con djgpp o mingw.
stat, fstat
E.


vi ringrazio. Risolto.
Ciao

ho trovato questo codice riportato sotto, domanda:
come posso fare per fare controllare la grandezza di un file senza scriverlo
sulla linea di comando?
Vi ringrazio
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
int main(int argc, char **argv)
{
    if(argc != 2)
        return 1;
    int file=0;
        if((file=open(argv[1],O_RDONLY)) < -1)
            return 1;
    struct stat fileStat;
    if(fstat(file,&fileStat) < 0)
        return 1;
    printf("Information for %s\n",argv[1]);
    printf("---------------------------\n");
    printf("File Size: \t\t%d bytes\n",fileStat.st_size);
    printf("Number of Links: \t%d\n",fileStat.st_nlink);
    printf("File inode: \t\t%d\n",fileStat.st_ino); 

 sulla linea di comando?
Scrivi il nome direttamente nel codice.
E.

 Scrivi il nome direttamente nel codice.
quello che ho pensato, e che ho provato, ma pare che
non funzioni. Devo scriverlo char file1[]="nomefile";
o con char *file2="nomefile";
Ciao

 ma pare che non funzioni
Pare di sì invece
#include <stdio.h>
#include <fcntl.h>
int main(int argc, char *argv[]) {
  printf("%d\t%d\n",open("foo.c",O_RDONLY),open(argv[1],O_RDONLY));
  return 0; }
$ make foo
cc     foo.c   -o foo
$ ./foo foo.c
3  4

Z.zen ha scritto:

vanno bene entrambe.
E.

il codice che ho riportato in un post precedente
funziona. Quello che volevo fare e non dover
scrivere il nome del file ogni volta dalla linea di
comando.
Ciao

 volta dalla linea di comando.
Ora sono confuso io.

"Andrea D'Amore" <and.da...@LOSPAM.gmail.com.invalid> ha scritto nel 
messaggio news:and.damoreVIA-065...@newssrv.fastweb.it...

ovvero?
Ciao

 o con char *file2="nomefile";
Dovrebbe essere indifferente. Probabilmente il problema sta
da qualche altra parte del tuo programma.
Per aiutarti meglio dovresti farci vedere un pochino di codice.
ciao
G

> Per aiutarti meglio dovresti farci vedere un pochino di codice.
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
int main(int argc, char **argv)
{
    if(argc != 2)
        return 1;
    int file=0;
        if((file=open(argv[1],O_RDONLY)) < -1)
            return 1;
    struct stat fileStat;
    if(fstat(file,&fileStat) < 0)
        return 1;
    printf("Information for %s\n",argv[1]);
    printf("---------------------------\n");
    printf("File Size: \t\t%d bytes\n",fileStat.st_size);
    printf("Number of Links: \t%d\n",fileStat.st_nlink);
    printf("File inode: \t\t%d\n",fileStat.st_ino);
    printf("File Permissions: \t");
    printf( (S_ISDIR(fileStat.st_mode)) ? "d" : "-");
    printf( (fileStat.st_mode & S_IRUSR) ? "r" : "-");
    printf( (fileStat.st_mode & S_IWUSR) ? "w" : "-");
    printf( (fileStat.st_mode & S_IXUSR) ? "x" : "-");
    printf( (fileStat.st_mode & S_IRGRP) ? "r" : "-");
    printf( (fileStat.st_mode & S_IWGRP) ? "w" : "-");
    printf( (fileStat.st_mode & S_IXGRP) ? "x" : "-");
    printf( (fileStat.st_mode & S_IROTH) ? "r" : "-");
    printf( (fileStat.st_mode & S_IWOTH) ? "w" : "-");
    printf( (fileStat.st_mode & S_IXOTH) ? "x" : "-");
    printf("\n\n");
    /*printf("The file %s a symbolic link\n\n", (S_ISLNK(fileStat.st_mode))
? "is" : "is not");*/
    return 0;
}

 ovvero?
Ovvero: hai detto di non voler digitare il nome del file nella CLI, manu 
ti ha suggerito di scriverlo nel codice, hai detto che non funziona, ti 
ho mostrato un esempio che invece dimostra che funziona, Giacomo ha 
chiesto un esempio del codice che "non funziona" (frase criptica per chi 
legge il ng) e hai incollato lo stesso codice del "non funziona" 
iniziale.
La parte fondamentale era: quale risultato ti aspetti dal programma? Che 
risultato ottieni invece?

il primo codice che ho inviato funziona.
Il codice che ho modificato, aggiungendo il nome del file
non funziona. Non ho capito come viene letto il nome
del file dall'interno del programma. Quando lo scrivo nella
cli, viene assegnato al variabile argv[1].
Ciao

Bene, e cos'ï¿œ che non funziona?
E.
Z.zen ha scritto:


il codice che ho invisto funziona.
Non funziona quando scrivo il nome del file nel codice
stesso.
Mi pare che non legga pi� i dati relativi al file.
Ciao

 stesso.
Fai vedere che hai fatto. Senza codice non po aiutare sessuno. Almeno
io non so, che cambiamenti hai fatto.
cc

 Mi pare che non legga più i dati relativi al file.
Cioe'? Ti stampa dei dati errati? Non stampa nulla? Che cosa
vedi a video di diverso rispetto a quello che fa il programma
che funziona bene?
Aiutaci a darti una mano altrimenti e' una pena per noi e
per te! :)
ciao
Giacomo