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:
pissy_kitty 24 ani
Femeie
24 ani
Sibiu
cauta Barbat
24 - 48 ani
Mihai Sprinceana / SO Linux&Unix / Functia creat (apel sistem) Moderat de Cristy89, Houssey, cr3us, fireratbat, profu.info, sade5000
Autor
Mesaj Pagini: 1
cr3us
Moderator

Inregistrat: acum 16 ani
Postari: 160
creat- deschide si creaza un fisier


Pentru aceasta avem nevoie de urmatoarele fisiere header(biblioteca) :



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

Structura generala:

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
int creat(const char *pathname, mode_t mode);



Apelul de sistem open() este folosit pt. a convertim un nume de cale intr-un descriptor de fisier. Cand apelul a reusit fisierul descriptor intors va fi cel mai mic fisier descriptor care nu este deschis pt.proces. Acest apel creeaza un nou fisier nepartajat cu alte procese (dar poate fi partajat in cazul apelului fork() )


Flag-uri folosite:

O_RDONLY -deschide fisierul doar pt.citire

O_WRONLY - deschide fisierul doar pt.scriere

O_RDWR - deschide fisierul pt.citire si scriere



O_CREAT -daca fisierul nu exista va fi creat. Proprietarul (user ID) al fisierului este setat la user id al procesului. (group id similar)
   
O_EXCL -cand este folosit cu O_CREAT, daca fisierul exista deja este o eroare si deschiderea fisierului va esua.
   

   
O_TRUNC
    If the file already exists and is a regular file and the open mode allows writing (i.e., is O_RDWR or O_WRONLY) it will be truncated to length 0. If the file is a FIFO or terminal device file, the O_TRUNC flag is ignored. Otherwise the effect of O_TRUNC is unspecified.
O_APPEND -fisierul este deschis in modul append, pointer-ul fisierului este pozitionat la sfarsitul fisierului cu lseek

O_NONBLOCK or O_NDELAY -cand este posibil fisierul este deschis in modul non-blocking

O_SYNC -fisierul este deschis pt.sincronizre I/O. Orice scriere a fisierului descriptor rezultat va duce la blocarea fisierului apelat pana cand datele nu au fost scrise fizic pe hardware.

   
O_NOFOLLOW -daca numele caii este un link simbolic - deschidere esuata fisier!
   
O_DIRECTORY -daca numele caii nu este un director - deschidere esuata fisier


Constante simbolice:

The following symbolic constants are provided for mode:

S_IRWXU
    00700 user (file owner) has read, write and execute permission
S_IRUSR (S_IREAD)
    00400 user has read permission
S_IWUSR (S_IWRITE)
    00200 user has write permission
S_IXUSR (S_IEXEC)
    00100 user has execute permission
S_IRWXG
    00070 group has read, write and execute permission
S_IRGRP
    00040 group has read permission
S_IWGRP
    00020 group has write permission
S_IXGRP
    00010 group has execute permission
S_IRWXO
    00007 others have read, write and execute permission
S_IROTH
    00004 others have read permission
S_IWOTH
    00002 others have write permisson
S_IXOTH
    00001 others have execute permission


RETURN VALUE
open and creat return the new file descriptor, or -1 if an error occurred (in which case, errno is set appropriately). Note that open can open device special files, but creat cannot create them - use mknod(2) instead.

On NFS file systems with UID mapping enabled, open may return a file descriptor but e.g. read(2) requests are denied with EACCES. This is because the client performs open by checking the permissions, but UID mapping is performed by the server upon read and write requests.

If the file is newly created, its atime, ctime, mtime fields are set to the current time, and so are the ctime and mtime fields of the parent directory. Otherwise, if the file is modified because of the O_TRUNC flag, its ctime and mtime fields are set to the current time.


ERRORS

EEXIST -numele caii exista deja si O_CREAT si O_EXCL au fost folosite
 
EISDIR - numele caii se refera la un director si accesul cerut implica scrierea (sunt setate fie O_WRONLY fie O_RDWR)

EACCES -accesul cerut catre fisier nu este permis sau unul din directoare din cale nu permite permisiunea de cautare(executie) sau fisierul nu exista inca si accesul de a scrie in directorul parinte nu este permis


ENAMETOOLONG -numele caii este prea lung

ENOENT - O_CREAT nu este setat iar numele fisierului nu exista.

ENOTDIR -o componenta folosita ca un director in numele caii nu este de fapt un director sau O_DIRECTORY a fost specificat si in plus numele caii nu este un director

ENXIO -  O_NONBLOCK | O_WRONLY este setat , fisierul numit este FIFO si nici un proces nu are fisiere deschise pt.citire.

ENODEV - avem un  fisier special (fisier device) si nu corespunde cu nici un device care sa existe. (bug al nucleului Sistemului de Operare Linux; ENXIO va fi intors in aceasta situatie)


EROFS -numele caii se refera la un fisier de pe un sistem de fisiere read-only si a fost cerut accesul la scriere

ETXTBSY - numele caii se refera la o imagine executabila care se afla in executie deja si la care a fost cerut accesul la scriere
   
EFAULT - numele caii se afla in afara spatiului de adresa accesibil


ENOMEM -memorie insuficienta pt.nucleul SO

EMFILE -procesul are deja deschise nr.maxim de fisiere

ENFILE -limita nr.de fisiere deschise pe sistem a fost atinsa


_______________________________________
Cr3u$

pus acum 15 ani
   
Pagini: 1  

Mergi la