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
int main()
{
printf( "\n char belegt %d Bytes", sizeof( char ));
printf( "\n int belegt %d Bytes", sizeof( int ));
printf( "\n short belegt %d Bytes", sizeof( short ));
printf( "\n long belegt %d Bytes", sizeof( long ));
printf( "\n unsigned char belegt %d Bytes", sizeof( unsigned char ));
printf( "\n unsigned int belegt %d Bytes", sizeof( unsigned int ));
printf( "\n unsigned short belegt %d Bytes", sizeof( unsigned short ));
printf( "\n unsigned long belegt %d Bytes", sizeof( unsigned long ));
printf( "\n float belegt %d Bytes", sizeof( float ));
printf( "\n double belegt %d Bytes\n", sizeof( double ));
return 0;
}
siehe: http://www.bsdforen.de/showthread.php?t=4894&goto=nextoldest