C Funktion benötigt Filepointer

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
antimicro
User
Beiträge: 151
Registriert: Sonntag 29. Februar 2004, 16:24

Hi,
wie bekomme ich einen Filepointer auf eine Datei?
sowas in der Art wie...

Code: Alles auswählen

import ctypes

datei = file("jo",'w')
p_datei = ctypes.pointer(datei)
ich brauche den Filepointer für eine Funktion in einer vorkompilierten Lib... das ist doch sicher ein alltägliches Problem, oder?
greetings
sebi
BlackJack

An den Dateidescriptor kann man herankommen:

Code: Alles auswählen

In [1]:file.fileno?
Type:           method_descriptor
Base Class:     <type 'method_descriptor'>
String Form:    <method 'fileno' of 'file' objects>
Namespace:      Python builtin
Docstring:
    fileno() -> integer "file descriptor".

    This is needed for lower-level file interfaces, such os.read().
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Mit os.open bekommt man beim Oeffnen einer Datei gleich einen Filedescriptor zurueck.
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

antimicro hat geschrieben:das ist doch sicher ein alltägliches Problem, oder?
Nein. APIs, die direkt mit FILE* arbeiten, haben den Nachteil, dass die resultierenden Libraries compilerspezifisch sind. Will heißen: Eine DLL, die mit GCC erstellt wurde, kann nicht von einem MSVC-Programm benutzt werden.

Das selbe Problem hast du mit Python, wenn Python z.B. mit MSVC kompiliert wurde. Von daher glaube ich nicht, dass ctypes da etwas für vorsieht.

Du könntest mit Hilfe von SWIG einen Wrapper für die Funktion schreiben, die einen normalen Dateinamen nimmt. (Und sicherstellen, dass du deinen Wrapper mit MSVC kompilierst; damit ist der offizielle Pythoninterpreter kompiliert, IIRC)
Antworten