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:
OnutzaGirl
Femeie
24 ani
Galati
cauta Barbat
24 - 51 ani
Mihai Sprinceana / SO Linux&Unix / Functii cu descriptorul de fisier epoll in linux (epoll =apel sistem) Moderat de Cristy89, Houssey, cr3us, fireratbat, profu.info, sade5000
Autor
Mesaj Pagini: 1
cr3us
Moderator

Inregistrat: acum 16 ani
Postari: 160
1) epoll_create


Deschide un descriptor de fisier epoll cerand nucleului SO Linux sa aloce un eveniment dimensionat pt. descriptorii de marime.


Marimea nu este cea maxima ci doar un indiciu catre nucleu SO despre cum sunt dimensionate structurile interne.

Fisierul descriptor intors va fi folosit pt. toate apeluri folosite de interfata epoll.

Descriptorul de fisier intors de epoll_create trebuie inchis folosind close.


In caz de succes epoll_create intoarce un intreg pozitiv identificand descriptorul.

In caz de eroare epoll_create intoarce -1 si un mesaj de eroare este setat .



Structura generala:

int epoll_create(int size)   


Nu uitati sa includeti functia biblioteca (header):

#include <sys/epoll.h>




2) epoll_ctl

Controleaza interfata pt.un descriptor epoll numit epfd cerand ca operatia op sa fie facut in fisierul descriptor tinta fd(de la file descriptor). Evenimentul descrie obiectul legat de fisierul descriptor fd.


Pe scrut structura epoll_event este definita ca:


        typedef union epoll_data {
                void *ptr;
                int fd;
                __uint32_t u32;
                __uint64_t u64;
        } epoll_data_t;

        struct epoll_event {
                __uint32_t events;      /* Epoll events */
                epoll_data_t data;      /* User data variable */
        };



Exemple de tipuri de evenimente:


EPOLLIN - fisierul asociat este disponibil pt.operatii de citire

 
EPOLLOUT -fisierul asociat este disponibil pt. operatii de scriere

EPOLLPRI - exista data urgente disponibile pt. operatii de citire

EPOLLERR - o eroare de conditie s-a produs si este asociata fisierului descriptor
   
EPOLLHUP -hang up produs asupra fisierului descriptor


EPOLLET - seteaza comportament Edge Triggered pt. fisierul desriptor.(sunt niste arhitecturi distribuite)

EPOLLONESHOT - seteaza comportament One-Shot pt.fisierul descriptor. Aceasta inseamna ca dupa ce un eveniment a fost scos cu ajutorul lui epoll_wait fisierul descriptor asociat este dezactivat intern si alte evenimente nu pot fi raportate de catre interfata epoll. Utilizatorul trebuie sa apele epoll_ctl cu  EPOLL_CTL_MOD pt. a reinnoi fisierul descriptor cu o noua masca de evenimente( masca e reprezinta sub forma unei matrici)

Interfata epoll suporta toate fisierele descriptor ce suporta poll.

Valori valide pt. parametri optiunilor:


    EPOLL_CTL_ADD -adauga tinta fisierului descriptor fd catre descriptorul epoll epfd si asociaza evenimentul notat cu event fisierul intern legat de fd.

    EPOLL_CTL_MOD -schimba evenimentul event asociat catre fisierul tinta descriptor fd

    EPOLL_CTL_DEL - va inlatura fisierul tinta descriptor fd din descriptorul de fisier epoll epfd
       


In caz de succes epoll_ctl intoarce valoarea 0.

In caz de eroare intoarce valoarea -1 sau un mesaj de eroare este setat.


Erori:

EBADF
    The epfd file descriptor is not a valid file descriptor.
EPERM
    The target file fd is not supported by epoll.
EINVAL
    The supplied file descriptor, epfd, is not an epoll file descriptor, or the requested operation op is not supported by this interface.
ENOMEM
    There was insufficient memory to handle the requested op control operation.
Structura generala:

int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event) 


Nu uitati sa includeti functia biblioteca (header):

#include <sys/epoll.h>



3) epoll_wait - asteapta un eveniment I/O (intrare-iesire) pt. un descriptor epoll de fisier




Nu uitati sa includeti functia biblioteca (header):

#include <sys/epoll.h>

Structura generala:

int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout) 


Asteapta evenimente pt. fisier descriptor epoll pt. un timp maxim de milisecunde. Zona de memorie punctata de evenimente va contine evenimente care vor fi disponibile celui care apeleaza. Nr.maxim de evenimente este intors de functia epoll_wait si acest nr. trebuie sa fie >0. Specificand un timeout=-1 va face ca functia epoll_wait sa astept un timp nedefinit pe cand specificarea unui timeout=0 va face ca functia epoll_wait sa intoarca o valoare (return cod= 0 ) chiar daca nu sunt evenimente disponibile.


Structura epoll_event este definita ca:


        typedef union epoll_data {
                void *ptr;
                int fd;
                __uint32_t u32;
                __uint64_t u64;
        } epoll_data_t;

        struct epoll_event {
                __uint32_t events;      /* Epoll events */
                epoll_data_t data;      /* User data variable */
        };


Datele pt.fiecare structura intoarsa for contine aceleasi date pe care utilizatorul le-a setat cu epoll_ctl(EPOLL_CTL_ADD,EPOLL_CTL_MOD)

In caz de succes epoll_wait intoare nr. de fisiere descriptor gata pt cererile I/o (input-output) sau zero daca nici un fisier descriptor nu este gata in acel timeout specificat in milsecunde.

In caz de eroare epoll_wait intoarce valoarea -1 sau un mesaj de eroare este setat.



Erori:



EBADF -epfd nu este un fisier descriptor valid

EINVAL -fisierul descriptor epfd nu este un descriptor de fisier epoll sau parametrul maxevent pt.nr.maxim de evenimente este <0 sau =0

EFAULT - zona de memorie punctata de evenimente nu mai este accesibilia la permisiunea de scriere


_______________________________________
Cr3u$

pus acum 15 ani
   
Pagini: 1  

Mergi la