Cod sursa(job #1334640)

Utilizator crushackPopescu Silviu crushack Data 4 februarie 2015 15:39:30
Problema A+B Scor 100
Compilator cpp Status done
Runda Lista lui wefgef Marime 0.82 kb
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>

#include <stdio.h>
#include <string.h>

const char IN[] = "adunare.in", OUT[] = "adunare.out";

int A, B;
int fd, rc, size;
char * text;
char rez[10];

int main() {

	fd = open(IN, O_RDONLY);
	if ( fd < 0 )
		return - 1;

	size = lseek(fd, 0, SEEK_END);
	lseek(fd, 0, SEEK_SET);

	text = (char *)mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0 );

	if ( (void *) text == MAP_FAILED )
		return -3;

	sscanf(text, "%d %d", &A, &B);
	sprintf(rez, "%d\n", A + B);

	rc = munmap( (void *) text, size );
	if ( rc < 0 )
		return - 4;

	rc = close(fd);
	if ( rc < 0 )
		return - 2;

	fd = open(OUT, O_WRONLY | O_CREAT, 0644);
	if ( fd < 0 )
		return - 1;

	write(fd, rez, strlen(rez));

	rc = close(fd);
	if ( rc < 0 )
		return - 2;

	return 0;
}