[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)
----------------------------------------------------------------------