Seite 1 von 1

C Funktion benötigt Filepointer

Verfasst: Samstag 10. Juni 2006, 21:51
von antimicro
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?

Verfasst: Montag 12. Juni 2006, 07:18
von 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().

Verfasst: Montag 12. Juni 2006, 12:24
von Rebecca
Mit os.open bekommt man beim Oeffnen einer Datei gleich einen Filedescriptor zurueck.

Re: C Funktion benötigt Filepointer

Verfasst: Montag 12. Juni 2006, 12:42
von Joghurt
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)