[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: NSIG oder wieviele Signal hat mein System?
Hallo,
Marcus Lunzenauer schrieb:
> bei Aufgabe 3 wäre es durchaus interessant zu wissen, wieviele Signale
> mein jeweiliges System gerade hat.
Ja, sofern Du die Daten fuer den Signal-Handler nicht dynamisch verwalten
willst. Mit einer dynamischen Datenstruktur geht es aber auch ohne die
Information.
> Ich habe da irgendwo gelesen, dass es eine Konstante NSIG gibt, die
> bedeutet, dass es die Signale von 1 bis NSIG -1 gibt. Diese steht
> angeblich in der signal.h.
Die ist im X/OPEN Standard, aber (anscheinend?) nicht POSIX.
> Deshalb hab ich mir mal mein eigenes NSIG definiert, aber ist das der
> richtige Weg????
Nein, der richtige Weg ist, die Datenstruktur dynamisch zu machen (d.h.
z.B. eine Liste zu verwenden, in der zu den Handlern auch die jeweiligen
Nummern eingetragen sind).
> Eine zweite Sache:
>
> Gibt man "man strdup" ein, steht dort ein interessanter Eintrag über
> diese Funktion. In der Single Unix Spec V3 ist sie ebenfalls enthalten
> (aber XSI???). Benutzt man sie in seinem Programm, bekommt man:
>
> builtins.c: In function `builtin_trap':
> builtins.c:192: warning: implicit declaration of function `strdup'
Nun, das kommt darauf an, mit welchen Optionen Du uebersetzt. In
den Makefiles von Juergen steht (fast) immer als gcc-Aufruf drin:
gcc-3.2 -std=c99 -D_POSIX_C_SOURCE=2
Das bedeutet: C99 + POSIX.2-Standard (IEEE Std 1003.2).
Bei der msh1 fehlt das aber offenbar (Juergen: das halte ich fuer
einen Fehler). Das wuerde aber bei strdup auch nicht helfen, da die
Funktion anscheinend auch nicht im POSIX-Standard enthalten ist.
> Lustigerweise funktioniert es trotzdem....
Klar, die Funktion gibt es ja auch (unter Linux) in der Bibliothek,
aber portabel auf andere POSIX-Systeme ist es dann vielleicht nicht.
> gcc-3.2 mit "-std=c99" (ohne funktioniert es) schafft das überhaupt
> nicht:
>
> test.c: In function `main':
> test.c:4: storage size of `test' isn't known
>
> Es sind jetzt 4 Dateien mit insgesamt 12kB. Ich werde jetzt bestimmt
> _nicht_ alles auf ANSI C89 umeditieren.
Selbes Problem wie oben: "-std=c99" alleine sagt: _nur_ C99 Standard!
Da gibt es nun mal keine "struct sigaction". Und C89 wuerde da im
uebrigen auch nicht weiterhelfen.
Was Du brauchst, ist der POSIX-Standard noch dazu, d.h. so etwas wie
gcc-3.2 -std=c99 -D_POSIX_C_SOURCE=2 ... (siehe oben)
> Ich hab gerade 2 Stunden wegen dieses Fehlers wie blöd gesucht.
Sorry, aber ich war leider die letzten 2 Stunden im IFC-Seminar...
Aber wenn es doch ohne "-std=c99" problemlos tut, wuerde ich da keine
zwei Stunden drauf verschwenden, sondern erstmal so compilieren, und
wenn alles funktioniert ueber die Compiler-Flaggen nachdenken.
Gruss
Elmar.
----------------------------------------------------------------------
Today is Setting Orange, the 53rd day of The Aftermath in the YOLD 3168
----------------------------------------------------------------------
133-"Don't worry. I've got a plan."
(From the Canonical List of Famous Last Words)
----------------------------------------------------------------------