http://www.pronix.de -> Forum -> C-Programmieren

Unterseiten

Forum: C-Programmieren

Moderatoren: juergen, Martin Conrad

Thema: Durch-Reich-Programm

  • (nur registrierte Mitglieder)

Durch-Reich-Programm

tasiwaiar am 26.07.2010 um 14:21

Hallo Leute!
Ich bin Linux-Admin und hab mich hier registriert um mein Durchreich-Programm zu präsentieren.
Ich benutze es zum Nutzen der Bash-Pipe zeichen ohne Speziellen Zweck. Besonders in Shell-Scipten hat es sich bewährt!
Hier nun der Quellcode. Ich denke, den muss ich euch C-Profis nicht erklären:

/*	* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
		Durchreich-Funktionalität (gedacht zum Einsatzt in Pipes)
		Dateiname:   durchreich.c
		Autor:       Tsi'Vair
		Datum:       16.07.2010
	* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// includes
#include <stdio.h>  // I/O
#include <malloc.h> // Pufferverwaltung

main (void) // main Anfang
{
	/* * * * * * * * * * * * * * * * * * *
		1. DEKLARATIONEN
	   * * * * * * * * * * * * * * * * * * */
	char* text = malloc(1024) ; // Erzeugung eines Puffers in Höhe von 1KB
	int   s    = 1024         ; // Puffergröße
	int   n    = 0            ; // Aktuelles Zeichen
	int   c                   ; // Zeichen
	int   i                   ; // Schleifenindex
	
	/* * * * * * * * * * * * * * * * * * *
		2. EINLESEN
	   * * * * * * * * * * * * * * * * * * */
	while ( ( c = getc(stdin) ) != EOF )  // Zeichenweseses einlesen wenn kein EOF
	{
		text[n++] = c; // Zeichen speichern
		
		if ( n >= s ) // Wenn Puffer voll ...
		{
			text  =   realloc (text, s + 1024) ; // Dann Puffer vergrößern
			s    += 1024                       ; // und Größe anpassen
		}
	} // Auslesen Ende
	
	/* * * * * * * * * * * * * * * * * * *
		3. AUSGEBEN
	   * * * * * * * * * * * * * * * * * * */
	putc('\n', stdout); // Eine Trennlinie
	putc('\n', stdout); // und noch eine
	for ( i = 0; i < n; i++) // Jetzt alle Zeichen 
	{
		putc(text[i], stdout); // ausgeben
	}
	
	putc('\n', stdout); // mit einem Zeilenumbruch
	free(text); // Speicher freigeben
} // main Ende NICHT LÖSCHEN

So, was haltet ihr davon?
 

Re: Durch-Reich-Programm

Martin Conrad (webmaster) am 26.07.2010 um 16:51

Hi,

Mir erschliesst sich der Sinn für das Progamm nicht.
Zudem isses gefährlich, du prüfst nicht, ob du Speicher wirklich bekommst, aber schreibst in den Bereich. Wenn int am Ende ist. explodiert das Programm.

Bis denne

Martin

--
0xC0FFEE

 

Re: Durch-Reich-Programm

broesel (webmaster) am 26.07.2010 um 20:47

Zum einen lässt sich Dein Programm wesentlich kürzer formulieren:


#include <stdio.h>

int main(void)
{
	int c;

	while ((c = fgetc(stdin)) != EOF) {
		putc(c, stdout);
	}

	return 0;
}


Zum anderen gibt es das Programm bereits in jeder Linux-Distribution: es heißt "cat". Grafik: Smilie Zwinker

Gruss,
Philip

--
The C Programming Quiz (externer link) - bitte Fragen einreichen :)

 

Re: Durch-Reich-Programm

Martin Conrad (webmaster) am 27.07.2010 um 06:49

Huhu Philip,

Zitat:

Zum anderen gibt es das Programm bereits in jeder Linux-Distribution: es heißt "cat". Grafik: Smilie Zwinker


Die ganz Eiligen lösen sowas über Devices:

echo Huhu > /dev/stdout


Bis denne

Martin

--
0xC0FFEE

 
1.Ich wollte das öffnen der Datei der Shell überlassen, im gegensatz zu cat.
2. @broesel: Dein Programm ist zwar eine Lösung, aber Ich wollte erst nach EOF das gesamte Dokument ausgeben.
Für zeilenweises einlesen gibt es cat, sicher. Aber Ich wollte es nunmal Dokumentweise lösen. Außerdem ist es für den Einsatzt in Pipes (z. B. vor sed) gedacht.
PS: Es ist mein erstes Produktiv-(Nicht-Spiel-)Programm!
Also nicht ganz sooo ernstnehemen, das mit dem Speicher Grafik: Smilie Zwinker!
 
  • (nur registrierte Mitglieder)