Mihai Sprinceana
Un forum de programare cu de toate. Va astept sa va inscrieti si sa deveniti moderatori. Oricine este binevenit aici sa se inscrie si sa aiba acces la informatie free! Fiecare este liber sa adauge proiecte programe free etc. Ajutati acest forum sa devina o comunitate puternica unde fiecare invata de la fiecare! Tot ce trebuie sa faceti este sa va inregistrati si fiecare contributie se poate dovedi utila in timp! Forumul este free informatia free dk aveti timp liber ajutati si pe ceilalti si invatati si voi in acelasi timp! Haideti sa facem ceva pt.a ne ajuta intre noi! Cititi regulament postare forum inainte de a posta!
Lista Forumurilor Pe Tematici
Mihai Sprinceana | Inregistrare | Login

POZE MIHAI SPRINCEANA

Nu sunteti logat.
Nou pe simpatie:
Giulia22 din Alba
Femeie
25 ani
Alba
cauta Barbat
25 - 40 ani
Mihai Sprinceana / SO Linux&Unix / Functia fstat (apel sistem) Moderat de Cristy89, Houssey, cr3us, fireratbat, profu.info, sade5000
Autor
Mesaj Pagini: 1
cr3us
Moderator

Inregistrat: acum 16 ani
Postari: 160
stat, fstat, lstat - preia starea fisierului

 
Foloseste fisierele header(biblioteca) :

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

Structura generala:

int stat(const char *file_name, struct stat *buf);
int fstat(int filedes, struct stat *buf);
int lstat(const char *file_name, struct stat *buf); 


Aceste functii intorc informatii despre fisierele specificate. Nu este nevoie sa avem drepturi de acces la fisier pt.a obtine informatii dar avem nevoie de drepturi de cautare in toate directoarele aflate in calea care conduce catre fisier.


Stat - preia starea fisierului punctata de file_name si o completeaza in buf

lstat - este identic cu stat, cu exceptia cazului unui link simbolic

fstat - este identic cu stat , doar fisierului deschis ii este intoarsa stare in locul lui file_name

Toate intorc o structura stat data mai jos si care contine urmatoarele campuri:




    struct stat {
        dev_t         st_dev;      /* device */
        ino_t         st_ino;      /* inode */
        mode_t        st_mode;     /* protection */
        nlink_t       st_nlink;    /* number of hard links */
        uid_t         st_uid;      /* user ID of owner */
        gid_t         st_gid;      /* group ID of owner */
        dev_t         st_rdev;     /* device type (if inode device) */
        off_t         st_size;     /* total size, in bytes */
        blksize_t     st_blksize;  /* blocksize for filesystem I/O */
        blkcnt_t      st_blocks;   /* number of blocks allocated */
        time_t        st_atime;    /* time of last access */
        time_t        st_mtime;    /* time of last modification */
        time_t        st_ctime;    /* time of last status change */
    };

Valoarea st_size ne da marimea fisierului(fisier obisnuit sau symlink) in bytes. Marimea unui fisier symlink este data de dimensiunea numelui caiii.


Valoarea st_blocks da marimea fisierului in blocuri de 512 bytes.

Campul st_atime este schimbat de accesarea fisierului (exemple: execve, mknod, pipe, utime si read . Alte rutine ca mmap nu pot face update pt.campul st_atime.


Campul st_mtime este schimbat de modificari asupra fisierului( mknod, truncate, utime si write).

Acesta nu este schimbat de modificari ale proprietarului sau grupului.


Campul st_ctime este schimbat prin scrierea sau setare informatiei inode (proprietar, grup etc.).




Macro-urile POSIV sunt definite mai jos pt.a verifica tipul fisierului:

    S_ISREG(m)
        is it a regular file?
    S_ISDIR(m)
        directory?
    S_ISCHR(m)
        character device?
    S_ISBLK(m)
        block device?
    S_ISFIFO(m)
        fifo?
    S_ISLNK(m)
        symbolic link? (Not in POSIX.1-1996.)
    S_ISSOCK(m)
        socket? (Not in POSIX.1-1996.)

Urmatoarele flag-uri sunt definite pt. campul st_mode:


S_IFMT    0170000    bitmask for the file type bitfields
S_IFSOCK    0140000    socket
S_IFLNK    0120000    symbolic link
S_IFREG    0100000    regular file
S_IFBLK    0060000    block device
S_IFDIR    0040000    directory
S_IFCHR    0020000    character device
S_IFIFO    0010000    fifo
S_ISUID    0004000    set UID bit
S_ISGID    0002000    set GID bit (see below)
S_ISVTX    0001000    sticky bit (see below)
S_IRWXU    00700    mask for file owner permissions
S_IRUSR    00400    owner has read permission
S_IWUSR    00200    owner has write permission
S_IXUSR    00100    owner has execute permission
S_IRWXG    00070    mask for group permissions
S_IRGRP    00040    group has read permission
S_IWGRP    00020    group has write permission
S_IXGRP    00010    group has execute permission
S_IRWXO    00007    mask for permissions for others (not in group)
S_IROTH    00004    others have read permission
S_IWOTH    00002    others have write permisson
S_IXOTH    00001    others have execute permission



RETURN VALUE
On success, zero is returned. On error, -1 is returned, and errno is set appropriately. 
ERRORS

EBADF -campuri eronate

ENOENT - o componenta a caii file_name nu exista sau calea este un sir de caractere vid

ENOTDIR - o componenta a caii nu este un director

ELOOP -prea multe link-uri simbol gasite de-a lungul traversarii caii

EFAULT -adresa eronata

EACCES -acces interzis

ENOMEM -out of memory(kernel memory)

ENAMETOOLONG -nume fisier prea lung


_______________________________________
Cr3u$

pus acum 15 ani
   
Pagini: 1  

Mergi la