wie waers mit "EXIT_FAILURE"?
hm, strerror/warn/err/perror/what ever. wenn schon was errno setzt, sollte man das auch nutzen.
OMG... Sysprog-Tutor? Also für die Sysprog-Tutoren unter uns:
--- old.c 2009-01-15 21:34:39.000000000 +0100
+++ fsfree.c 2009-01-15 21:40:15.000000000 +0100
@@ -1,8 +1,9 @@
#include <stdio.h>
+#include <stdlib.h>
#include <sys/vfs.h>
#include <libgen.h>
-#define FAIL 1
+#define DODEL_PRINTF(...) if (printf(__VA_ARGS__) < 0) { fprintf(stderr, "Help!\n"); exit(EXIT_FAILURE); }
void usage(char *argv[]);
@@ -17,7 +18,7 @@
if (argc < 2) {
usage(argv);
- return(FAIL);
+ return(EXIT_FAILURE);
}
/* Get file system statistics */
@@ -28,16 +29,17 @@
free_blocks = s.f_bfree;
if (total_blocks == 0) {
- printf("Error: Total number of blocks returned zero.\n");
- return(FAIL);
+ DODEL_PRINTF("Error: Total number of blocks returned zero.\n");
+ return(EXIT_FAILURE);
}
percent_free = (double) free_blocks / total_blocks * 100;
- printf("%.1f%%\n", percent_free);
+ DODEL_PRINTF("%.1f%%\n", percent_free);
} else {
- printf("Error: Couldn't retrieve file system statistics for \"%s\".\n", argv[1]);
+ perror("statfs");
+ exit(EXIT_FAILURE);
}
return(retval);
Alles anzeigen
vor allem wenns schon genug Tools gibt die einem die gewünschte Information ausspucken
Es spuckt halt leider nicht jedes Tool die Information in einer leicht nutzbaren Form aus - spätestens, wenn man dann dabei ist, im hundertsten Script die Zeile
ADDR=`ifconfig ${IFACE} | grep "inet addr" | sed -e "s/.*inet addr:\([^[:space:]]*\).*/\1/"`
zu schreiben, kommt man drauf, daß sowas wie
eigentlich doch eleganter ist.
Außerdem kann es immer sein, daß Sachen auf einmal nicht mehr funktionieren, wenn sich das Ausgabeformat der Tools, aus denen man die Informationen auf die Art rausparst, irgendwann mal ganz minimal ändert.
Grad bei df kann dir das passieren - "/dev/md0" geht sich ja noch leicht in einer Zeile aus, aber wenn der Pfad der device node lang ist, steht der Pfad in einer Zeile und die dazugehörigen Werte erst in der nächsten:
/dev/mapper/server-root
90G 7.2G 78G 9% /
... und schon funktioniert der Pipeausdruck nicht mehr (und mit sed allein kann man das AFAIK gar nicht reparieren, weils zeilenbasiert arbeitet).