This is an old revision of the document!


Macro-ul DIE

Macrou-ul DIE folosit în sursele din laborator e util pentru verificarea codului de eroare întors de un apel de sistem.

Exemplu de utilizare:

fd = open("some file", O_CREAT, 0644);
 
DIE(fd < 0, "invalid file descriptor");

Macro-ul DIE este definit în fișierul util/utils.h din arhiva laboratorului și arată în felul următor:

#define DIE(assertion, call_description)				\
	do {								\
		if (assertion) {					\
			fprintf(stderr, "(%s, %d): ",			\
					__FILE__, __LINE__);		\
			perror(call_description);			\
			exit(EXIT_FAILURE);				\
		}							\
	} while(0)

Dezavantaje

Dacă verificarea specificată prin assertion eșuează, se afișează detalii despre eroare și se iese imediat din program, deci nu se eliberează resursele.

Alternativă

O abordare mai profesionistă, dar un pic mai complexă, presupune folosirea intrucțiunii goto. Exemplu:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
 
 
int main(void)
{
        int fd1, fd2;
 
        fd1 = open("file1", O_CREAT | O_RDWR, 0644);
        if (fd1 < 0) {
                perror("open file1 failed");
               goto exit_1;
        }
 
        fd2 = open("file2", O_CREAT | O_RDWR, 0644);
        if (fd2 < 0) {
                perror("open file2 failed");
                goto exit_2;
        }
 
/* ... rest of the code ...*/
 
    return 0;
 
exit_2:
        close(fd1);
 
exit_1:
        return -1;
 
}

Concluzie

Pentru că aplicațiile din laborator urmăresc în primul rând formarea deprinderii de a verifica mereu codul de eroare întors de apelurile de sistem, puteți folosi macro-ul DIE în rezolvarea task-urilor din laborator.

so/laboratoare/resurse/die.1364642856.txt.gz · Last modified: 2013/03/30 13:27 by mihnea.dobrescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0