Inhaltsverzeichnis

C

Bücher

empfehlenswerte C/C++ - Bücher:

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:

(eine) Antwort:

"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