C

C-Programme als Beispiele + Kommentare / Erklärungen im Quelltext

C-Programm & Cflags

3

Ich habe vor einiger Zeit das Prinzip von Makefiles anhand eines kleines Beispiels gezeigt -> http://suckup.de/howto/c/c-programm-primzahlen-makefiles/ <- den selben Quelltext kompilieren wir heute mit verschiedenen C-Flags und 1000000 Schleifendurchläufen …

 

1.)  ohne C-Flags

gcc -lm primzahlen.c -o primzahlen_slow

 

Output: time ./primzahlen_slow

[...] 999961 999979 999983 real 0m1.760s user 0m1.420s sys 0m0.164s

 

2.)  ohne C-Flags & ohne “math.h” (sqrt)

gcc primzahlen.c -o primzahlen_slow

 

Output: time ./primzahlen_slow

[...] 999961 999979 999983 real 0m1.407s user 0m0.988s sys 0m0.192s

 

3.)  -O2 & ohne “math.h” (sqrt)

gcc -O2 primzahlen.c -o primzahlen_2

 

Output: time ./primzahlen_slow

[...] 999961 999979 999983 real 0m1.405s user 0m0.976s sys More >
Struktogramm via Structorizer

C-Programm – einfacher Taschenrechner

3

Hier mal wieder ein einfaches Beispiel in C mit “Struktogramm” & “Programmablaufplan” & “Pseudocode” …

#gallery-1 { margin: auto; } #gallery-1 .gallery-item { float: left; margin-top: 10px; text-align: center; width: 25%; } #gallery-1 img { border: 2px solid #cfcfcf; } #gallery-1 .gallery-caption { margin-left: 0; }

 

Pseudocode:

begin Eine 'einfache' Rechenaufgabe (z.B. 5+5) eingeben. Aufteilung der Eingabe in (drei) Variablen [ein1, ein2, ein3] case ein2 is +: Addition: "ein1" & "ein3" -: Subtraktion: "ein1" & "ein3" *: Multiplikation: "ein1" & "ein3" More >

Optimierungen von Android unter Linux nutzen

6

Vor einiger Zeit habe ich ein kleines Shell-Script (SSSwitch – auto-switch settings) geschrieben, welches mein Android Handy beim Start optimiert und die Kernel-Einstellungen anpasst, wenn der Bildschirm an bzw. aus ist. Einige der Einstellungen kann man auch unter Linux verwenden. Als Beispiel beschreibe ich hier kurz, wie man die I/O Leistung verbessern kann und wer allgemein etwas zum optimieren von Linux / Ubuntu lesen möchte, dem hilft ggf. folgender Blog-Post weiter -> SpeedUp-Ubuntu

 

Ein Ausschnitt aus dem besagtem Skript …

# ========= # One-time tweaks to apply on every boot; # ========= STL=`ls -d /sys/block/stl*`; BML=`ls -d /sys/block/bml*`; MMC=`ls -d /sys/block/mmc*`;

… hier wurde der externe / interne Speicher von Android angegeben unter meinem Linux-System würde More >

C-Programm – String (char) kopieren

0

Hier einige Möglichkeiten, einen String zu kopieren …

#include <stdio.h> #include <string.h> /* --- 1. strcpy mit Arrays --- */ char *strcpy1(char ziel[], const char quelle[]) { int zahl = 0; // solange Zeichen von der Quelle vorhanden sind, // also quelle[zahl] ungleich 0 ist ... // (letztes Zeichen eines Strings ist immer \0 -> =0 -> false) while(quelle[zahl]) { // der Buchstabe aus dem Quell-Array wird // an die selbe Stelle ([zahl]) im Ziel-Array geschrieben ziel[zahl] = quelle[zahl]; // zahl wird um 1 erhöht (zahl=zahl+1)-> nächster Buchstabe zahl++; } // der neue Sting wird abgeschlossen ziel[zahl] = '\0'; return(ziel); } /* --- 2. strcpy mit Arrays --- */ char *strcpy2(char ziel[], const More >

C-Programm – check_mem für Nagios

2

Habe gerade ein kleines C-Programm geschrieben, welches mithilfe von Nagios / Icinga die Speicherauslastung (Arbeitsspeicher + Swap) eines Linux-Servers überprüfen kann. Wenn ein Server seine aktuell laufenden Programm auf der Festplatte auslagern muss, da zu wenig Arbeitsspeicher zur Verfügung steht, sollte man darüber ggf. informiert werden…

/***************************************************************************** * * Nagios check_mem plugin * * License: GPL * Copyright (c) 2000 Karl DeBisschop (kdebisschop@users.sourceforge.net) * Copyright (c) 2000-2007 Nagios Plugins Development Team * Copyright (c) 2011 Lars Moelleken (voku@voku-online.de) * * Description: * * This file contains the check_mem plugin * * * This program is free software: you can More >

C-Programm – neueste Datei eines Verzeichnisses (Linux)

2

Unter Linux kann man mit dem folgendem Befehl anzeigen lassen, welche die neuste Datei ist…

ls -1tr --group-directories-first /path/to/dir/ | tail -n 1

… habe gerade versucht dies mit C zu Programmieren, ggf. findest man noch Fehler im Skript!!! :-)

PS: weitere Infos zum arbeiten mit Dateien und Verzeichnissen findest du hier -> openbook.galileocomputing.de/c_von_a_bis_z/

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <dirent.h> #include <time.h> #include <sys/types.h> #include <sys/stat.h> time_t st_mTime(char *dir_name) { struct stat attribut; // printf("%s\n", dir_name); /* Test Ausgabe */ if (stat(dir_name, &attribut) == -1) { fprintf(stderr, "... stat-Fehler\n"); exit(1); } if (attribut.st_mode & S_IFREG) More >

C-Programm – Dateien kopieren unter Linux

1

In dem Buch “Linux-Programmierung” habe ich einige interessante Beispiele zum kopieren von Dateien unter Linux gefunden.

#include <unistd.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> int main() { char c; int in, out; // open - mit dem Systemaufruf open kann ein neuer Dateideskriptor erstellt werden // --------------------- // Modus -> Beschreibung // --------------------- // O_RDONLY -> nur zum lesen oeffnen // O_WONLY -> nur zum schreiben oeffnen // O_RDWR -> zum lesen und schreiben oeffnen // --------------------- // optionaler Modus -> Beschreibung // --------------------- // O_APPEND -> am Ende der Datei schreiben // O_TRUNC -> Inhalt der vorhandenen Datei wird geloescht // O_CREAT -> erstellt die Datei mit Berechtigungen More >

C-Programm – Umgebungsvariablen unter Linux

2

In dem Buch “Linux Programmierung” habe ich ein schönes Beispiel für Umgebungsvariablen unter Linux gefunden, welches ich gerade ein wenig Kommentiert habe…

“Beachten Sie, dass sich die Umgebung nur lokal zum Programm verhält. Änderungen, die innerhalb des Programmes durchgeführt werden, werden nicht nach außen reflektiert, da Variablenwerte nicht vom untergeordneten Prozess (unser Programm) an den übergeordneten Prozess (die Shell) propagiert werden.” – Seite 166

#include <stdlib.h> #include <stdio.h> #include <string.h> /* argc -> Anzahl Kommandozeilenparameter + Programmnamen (1), somit ist der Wert min. 1 */ /* argv -> ist ein Zeiger auf das Feld (Array) mit der in argc angegebene Anzahl von Elementen... ... und die Elemente (z.B.: argc[0] sind Zeiger auf eine More >

C-Programm – Dynamische Speicherverwaltung

1

In diesem Beispiel zeigt ich, wie man Speicher dynamisch anlegen bzw. verwalten kann …

/* ============================================================================ Autor : Lars Moelleken Datum : 10.02.2011 Beschreibung : Preiskalkulation Version : 1.0 Compiler : gcc 4.6.2-12 Programmschnittstelle: int main(void) Das Programm gibt den Wert 0 oder 1 zurück. Es werden keine Argumente erwartet. ============================================================================ */ /* ============================================================================ Praeprozessoranweisungen ============================================================================ */ #include #include #include #include #if defined __linux__ #include #elif More >

C-Programm – Palindrom

2

Dieses Programm teilt einen String in Wörter auf (strtok), anschließend wird jeweils geprüft ob diese von vorn und von hinten gelesen gleich bleiben und somit Palindrome sind.

#include <stdio.h> #include <string.h> #define LENGTH 150 // Testdatensatz: "Ha/n/nah", "La-ger-regal", "O%t/to", "(Reit-)tier", "Reliefpfeiler", "Ren--tner", "R!o!t)or", "st--ets", "nein", "Hall67o" und "Lastwa$gen" // Funktion: lengthOfString - die laenge von dem gegebenen String herausfinden int lengthOfString(char wort[]) { int i = 0; // solang das Ende (\0) nicht erreicht ist, wird der Wert i um 1 erhöht while (wort[i] != '\0') { i++; } return i; } // Funktion: isPalindrom - prueft, ob der angegebe String ein Palindrom (lal, otto, lagerregal ...) ist int More >
Go to Top