Jump to content
Manuel-xpto

Função atexit

Recommended Posts

Manuel-xpto

Boa tarde,

num trabalho de SOPE,

usamos está função (atexit) e na altura não percebi muito bem a sua utilidade:



 

#include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>

       void
       bye(void)
       {
           printf("That was all, folks\n");
       }

       int
       main(void)
       {
           long a;
           int i;

           a = sysconf(_SC_ATEXIT_MAX);
           printf("ATEXIT_MAX = %ld\n", a);

           i = atexit(bye);
           if (i != 0) {
               fprintf(stderr, "cannot set exit function\n");
               exit(EXIT_FAILURE);
           }

           exit(EXIT_SUCCESS);
       }

pelo que li ela guarda os registos de um programa antes de fazer fork, (por outro lado tem haver com a janela do terminal... não tenho a certeza).

No trabalho encontra-se aplicado aqui:

int main(int argc, char * argv[]){
    //startTime count
    resetInactiveTime();
    startTime = clock();
    //parentPid
    parentPid = getpid();
    //creates the output file
    recreateFilesAndFifos();
    //statistics variables
    generated = newStatistics(0,0,0);
    rejectedReceived = newStatistics(0,0,0);
    rejectedTrashed = newStatistics(0,0,0);
    //register cleaning function with atextit
    atexit(terminateProgram);

qual é a vantagem ou utilidade?

encontrei isto:

O registo destes handlers de terminação é feito por:

#include <stdlib.h>

int atexit(void (*func)(void));

//Regista o handler de terminação func (função void sem parâmetros). Retorna 0 em caso de sucesso e um valor diferente de 0 em caso de erro.

Na figura seguinte pode ver-se um esquema dos processos de início e terminação de um programa em C.

http://imgur.com/a/yc8QE

 

Edited by Manuel-xpto

Share this post


Link to post
Share on other sites
HappyHippyHippo

a funcao nao e mais do que um metodo de registo de funcoes a serem executadas quando a aplicacao termina, a ordem que estas funcoes sao chamadas e a inversa do seu registo.

nota : de tanta coisa que apresentas aqui, a melhor informacao que podes ter nao e nenhuma delas, mas sim a documentacao da propria funcao : http://pubs.opengroup.org/onlinepubs/009695399/functions/atexit.html


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Manuel-xpto

Muito obrigado pela explicação :thumbsup: ,  já percebi finalmente o objectivo da função no projecto da cadeira,
era chamar uma função que fazia o printf das estáticas  :)

 

/**
    Takes care of all the delete and closing operations, registered with atextit
*/
void terminateProgram(){
    cout << "Statistics:" << endl;
    cout << "Generated Requests:  " << endl << generated << endl;
    cout << "Received Rejections: " << endl << rejectedReceived << endl;
    cout << "Trashed Rejections:  " << endl << rejectedTrashed << endl;
    close(fdFifoEntrada);
    close(fdFifoRejeitados);
    delete generated;
    delete rejectedReceived;
    delete rejectedTrashed;
    cout << "Done" << endl;
}

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.