Benutzer-Werkzeuge

Webseiten-Werkzeuge


c

Dies ist eine alte Version des Dokuments!


C

Bücher

empfehlenswerte C/C++ - Bücher:

  • ISBN-10: 3833422165 (C++ Programmierung für Anfänger)
  • ISBN-13: 978-3898642217 (C++ Programmieren mit Stil) In diesem Buch findet der Leser einen kompakten und umfassenden Überblick zum ANSI C++ Standard.
  • ISBN-13: 978-3827328236 (Die C++-Programmiersprache: Deutsche Übersetzung der Special Edition)

Beispielschnipsel

STDIN

stdin2syslogd

#include <stdio.h>
#define SYSLOG_NAMES
#include <syslog.h>
#include <stdlib.h>
#include <string.h>


int main(int argc, const char *argv[])
{
  if (3 != argc)
  {
    fprintf(stderr, "Usage: stdin2syslogd priority syslog-tag\n");
    exit (1);
  }

  const char *priority_name = argv[1];
  const char *tag_name = argv[2];

  int priority = -1;
  int i;

  for (i = 0; prioritynames[i].c_name; ++i)
  {
    if (! strcmp(prioritynames[i].c_name, priority_name))
    {
      priority = prioritynames[i].c_val;
      break;
    }
  }

  if (priority < 0)
  {
    fprintf(stderr, "stdin-syslogd: priority \"%s\" not recognized",
      priority_name);
    exit (1);
  }

  // Log-Level wurde hier mit "LOCAL7" festgelegt:
  openlog(tag_name, LOG_PID|LOG_NDELAY, LOG_LOCAL7);

  // max. Zeilenlänge wurde hier mit 64kB festgelegt:
  char buffer[65536];

  while (NULL != fgets(buffer, sizeof(buffer), stdin))
  {
    syslog(priority, "%s", buffer);
  }
  return 0;
}
# gcc -o /usr/local/bin/stdin2syslogd stdin2syslogd.c
# tail -f /var/log/messages | fgrep Test_Tag
# echo "Das ist ein Logger-Test!" | /usr/local/bin/stdin2syslogd notice Test_Tag

Fehlercodes

Jeder bei Systemaufrufen vorkommende Fehler hat deshalb eine Nummer, einen mnemonischen Code, und normalerweise einen String mit einer Meldung.

Man kann dies alles benutzen, durch Einfügen von

#include

ins Programm.

Dies bewirkt bei korrekten Include-Dateien auch, dass die Variablen

extern int  errno;
extern char *sys_errlist[];
extern int  sys_nerr;

bekannt sind. Die Fehlervariable errno wird vom Systemaufruf gesetzt, wenn ein Fehler auftritt.

siehe: http://wwwsys.informatik.fh-wiesbaden.de/sysprog/buch0057.htm

Größe der C-Variablen anzeigen

Frage:

  • Wovon ist das abhängig, ob int = long ist?

(eine) Antwort:

  • Das ist wahrscheinlich vom Compiler abhängig. Die Plattform, die auf jeden Fall einen Compiler in long mit 64 bit hat, ist die DEC Alpha. Auf Sparc und auch x86 ist "long" 32 bit und erst

"long long" ist 64 bit lang. Der ANSI-C Standard gibt für long "mindestens 32 bit" vor. In Java ist das besser gelöst, da ist auf ALLEN Plattformen "byte = 8 Bit", "short = 16 Bit", "int = 32 Bit" und "long = 64 Bit".

systemtest.c

Mit diesem kleinen Programm kann jeder seine Plattform selber kontrollieren.

#include <stdio.h>
 
int main()
{
    printf("char belegt %d Bytes\n", sizeof(char));
    printf("int belegt %d Bytes\n", sizeof(int));
    printf("short belegt %d Bytes\n", sizeof(short));
    printf("long belegt %d Bytes\n", sizeof(long));
    printf("unsigned char belegt %d Bytes\n", sizeof(unsigned char));
    printf("unsigned int belegt %d Bytes\n", sizeof(unsigned int));
    printf("unsigned short belegt %d Bytes\n", sizeof(unsigned short));
    printf("unsigned long belegt %d Bytes\n", sizeof(unsigned long));
    printf("float belegt %d Bytes\n", sizeof(float));
    printf("double belegt %d Bytes\n", sizeof(double));
    return 0;
}

siehe: http://www.bsdforen.de/showthread.php?t=4894&goto=nextoldest

/home/http/wiki/data/attic/c.1636228586.txt · Zuletzt geändert: von david