示例#1
0
/**
 * @brief Zuschlag fuer alle Fische eines Besitzers
 */
static void zuschlag(char *besitzer, int zuschlag)
{
	int fd, ret, gefunden = 0;
	Fischsatz fisch;

	evtl_namen_kuerzen(besitzer);
	writer_lock();
	debug_wait();
	fd = open(DATEI, O_RDWR);
	if(fd < 0)
	{
		perror("open");
		writer_unlock();
		exit(1);
	}
	while((ret = read(fd, &fisch, sizeof(fisch))) == sizeof(fisch))
	{
		if(!strcmp(fisch.besitzer, besitzer))
		{
			fisch.preis += zuschlag;
			if(lseek(fd, -sizeof(fisch), SEEK_CUR) ==(off_t)-1)
			{
				perror("lseek");
				writer_unlock();
				exit(1);
			}
			if(write(fd, &fisch, sizeof(fisch)) != sizeof(fisch))
			{
				perror("write");
				writer_unlock();
				exit(1);
			}
			gefunden = 1;
		}
	}
	if(ret < 0)
	{
		perror("read");
		writer_unlock();
		exit(1);
	}
	else if(ret > 0)
	{
		fprintf(stderr, "Warnung: Datei \"%s\" korrumpiert\n", DATEI);
	}
	if(!gefunden)
	{
		printf("Achtung: Kein Kunde namens \"%s\" in der Datei \"%s\"\n", besitzer, DATEI);
	}
	close(fd);
	writer_unlock();
}
示例#2
0
/**
 * @brief Einen neuen Fisch in die Datenbank eintragen
 */
static void neu(char *besitzer, char *fischname)
{
	int fd;
	int ret;
	Fischsatz fisch;

	evtl_namen_kuerzen(besitzer);
	evtl_namen_kuerzen(fischname);
	
	writer_lock();
	debug_wait();
	fd = open(DATEI, O_RDWR|O_CREAT, 0600);
	if(fd < 0)
	{
		perror("open");
		writer_unlock();
		exit(1);
	}
	while((ret = read(fd, &fisch, sizeof(fisch))) == sizeof(fisch))
	{
		if(!strcmp(fisch.besitzer, besitzer) && 
		   !strcmp(fisch.fischname, fischname))
		{
			printf("Kann Besitzer \"%s\" / Fisch \"%s\" nicht eintragen: Eintrag existiert bereits!\n", besitzer, fischname);
			writer_unlock();
			exit(1);
		}
	}
	if(ret < 0)
	{
		perror("read");
		writer_unlock();
		exit(1);
	}
	else if(ret > 0)
	{
		fprintf(stderr, "Warnung: Datei \"%s\" korrumpiert\n", DATEI);
		lseek(fd, -ret, SEEK_END);
	}
	strcpy(fisch.besitzer, besitzer);
	strcpy(fisch.fischname, fischname);
	fisch.preis = GRUNDPREIS;
	if((ret = write(fd, &fisch, sizeof(fisch))) != sizeof(fisch))
	{
		if(ret < 0)
			perror("write");
		else
			fprintf(stderr, "?!? Konnte nur %d von %d bytes schreiben\n", ret, sizeof(fisch));
	}
	close(fd);
	writer_unlock();
}
示例#3
0
void RTC_IRQHandler(void)
{
#ifdef DEBUG
	/* setup uart to send commands to debug interface */
	//init_uart_interface_for_debuging();

	/* send character indicating RTC time interrupt */
	LeUart_SendChar('r');
	LeUart_SendChar('\n');

	char buff[30];
	sprintf(buff, "Rx: %d\n", rxBuff.wrI);
	LeUart_SendText(buff);

	if (true == rxBuff.overflow)
	{
		LeUart_SendText("Overflow\n");
		for (int i = 0; i < rxBuff.wrI; i++)
		{
			LeUart_SendChar(rxBuff.data[i]);
		}
		RTC_setTime(10000);
	}

	/* transmit received data from gps module */
	if (true == rxBuff.ready)
	{
		for (int i = 0; i < rxBuff.wrI; i++)
		{
			LeUart_SendChar(rxBuff.data[i]);
		}
		LeUart_SendChar('\n');
		clearRxBuffer();
	}

	/* wait */
	//debug_wait();

	/* setup uart to listen for commands from gps module */
	//init_uart_interface();

	/* wait */
	debug_wait();

#endif
	RTC_clearInt();
}
示例#4
0
/**
 * @brief Eine Liste des Fischbestandes ausgeben.
 */
static void liste(char *besitzer)
{
	int fd, ret;
	int i = 0;
	int gesamtpreis = 0;
	Fischsatz fisch;

	if(besitzer)
		evtl_namen_kuerzen(besitzer);
	leser_lock();
	debug_wait();
	fd = open(DATEI, O_RDONLY);
	if(fd < 0)
	{
		perror("open");
		leser_unlock();
		exit(1);
	}
	while((ret = read(fd, &fisch, sizeof(fisch))) == sizeof(fisch))
	{
		if(besitzer)
		{
			if(!strcmp(fisch.besitzer, besitzer))
			{
				if(++i == 1)
				{
					printf("Fische von Besitzer %s:\n", besitzer);
					printf("Name  Preis\n");
				}
				printf("%s: %d Eur\n", fisch.fischname, fisch.preis);
				gesamtpreis += fisch.preis;
			}
		}
		else
		{
			if(++i == 1)
			{
				printf("Liste aller Fische:\n");
				printf("Besitzer Name Preis\n");
			}
			printf("%s   %s: %d Eur\n", fisch.besitzer, fisch.fischname, fisch.preis);
		}
	}
	if(ret < 0)
	{
		perror("read");
		leser_unlock();
		exit(1);
	}
	else if(ret > 0)
	{
		fprintf(stderr, "Warnung: Datei \"%s\" korrumpiert\n", DATEI);
	}
	if(i == 0)
	{
		if(besitzer)
			printf("%s hat keine Fische bei uns\n", besitzer);
		else
			printf("Keine Fische vorhanden\n");
	}
	else
	{
		printf("Insgesamt: %d Fische", i);
		if(gesamtpreis)
			printf(", Summe: %d Euro\n", gesamtpreis);
		else
			printf("\n");
	}
	close(fd);
	leser_unlock();
}
示例#5
0
/**
 * @brief Rechnung fuer Besitzer ausgeben, seine Eintraege loeschen
 */
static void rechnung(char *besitzer)
{
	int fd, fdz, ret, gefunden = 0;
	Fischsatz fisch;
	int gesamtpreis = 0;
	writer_lock();
	debug_wait();
	if(rename(DATEI, ZWISCHENDATEI) < 0)
	{
		perror("rename");
		writer_unlock();
		exit(1);
	}
	evtl_namen_kuerzen(besitzer);

	fdz = open(ZWISCHENDATEI, O_RDONLY);
	if(fdz < 0)
	{
		perror("open");
		writer_unlock();
		exit(1);
	}
	fd = open(DATEI, O_RDWR|O_CREAT, 0600);
	if(fd < 0)
	{
		perror("open");
		writer_unlock();
		exit(1);
	}
	while((ret = read(fdz, &fisch, sizeof(fisch))) == sizeof(fisch))
	{
		if(!strcmp(fisch.besitzer, besitzer))
		{
			gesamtpreis += fisch.preis;
			gefunden = 1;
		}
		else
		{
			if(write(fd, &fisch, sizeof(fisch)) != sizeof(fisch))
			{
				perror("write");
				writer_unlock();
				exit(1);
			}
		}
	}
	if(ret < 0)
	{
		perror("read");
		writer_unlock();
		exit(1);
	}
	else if(ret > 0)
	{
		fprintf(stderr, "Warnung: Datei \"%s\" korrumpiert\n", DATEI);
	}
	if(gefunden)
	{
		printf("Rechnungsbetrag fuer %s: %d Eur\n", besitzer, gesamtpreis);
	}
	else
	{
		printf("Achtung: Kein Kunde namens \"%s\" in der Datei \"%s\"\n", besitzer, DATEI);
	}
	close(fdz);
	close(fd);
	writer_unlock();
}