2011-01-05 3 views

Antwort

2

Sicher können Sie, es sei denn, Ihre buffer ist static.

+4

Diese Antwort ist möglicherweise richtig, aber es ist nicht offensichtlich. Der Standard erfordert nicht, dass snprintf reentrant ist (was eine viel stärkere Anforderung als nur thread-safe ist). Wenn glibc es reentrant macht, geht das über die Anforderungen des Standards hinaus. –

2

Ja.

Warum denkst du, du könntest nicht? Es gibt kein Global.

Ein Gedanke: der Puffer ist lokal für die Funktion, warum möchten Sie eine Zeichenfolge formatieren und nichts damit tun?

+0

- Ich war mir nicht sicher, ob die Implementierung von snprintf statische Daten verwendet. Beantworten Sie Ihre zweite Frage: Ich habe vor, den Puffer mit send() in einen Socket zu schreiben, von dem ich annehme, dass er auch wieder einspringt (ich muss mich auch um errno kümmern). Habe ich diese Annahme richtig? –

4

Ich komme auf diese Seite, weil ich auch die gleiche Frage stelle. Hier ist, was ich von Bücher zu lesen:

Programmierung für Fortgeschrittene in der UNIX-Umgebung: Zweite Ausgabe

Abschnitt 10.6

Die meisten Funktionen, die nicht in Abbildung 10.4 (eine Liste der einspringenden Funktionen) fehlen, weil (a) sie statische Datenstrukturen verwenden, (b) sie malloc oder free aufrufen, oder (c) sie Teil der Standard-E/A-Bibliothek sind.

Die Linux Programming Interface

Kapitel 21.1.2

Funktionen auch nonreentrant sein können, wenn sie für ihre interne Buchführung statische Datenstrukturen verwenden. Die offensichtlichsten Beispiele für solche Funktionen sind die Mitglieder der stdio-Bibliothek (printf(), scanf() usw.), die interne Daten Strukturen für gepufferte E/A aktualisieren.

Ich denke, es ist Umsetzung abhängig. Es hängt auch davon ab, wie Sie snprintf tatsächlich verwenden (der Puffer ist wichtig). Die sicherste Antwort auf die Frage sollte "Nein" sein.

Verwandte Themen