empfehlenswerte C/C++ - Bücher:
#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
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
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".
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