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.
antimicro
User
Beiträge: 151
Registriert: Sonntag 29. Februar 2004, 16:24

C Funktion benötigt Filepointer

Beitragvon antimicro » Samstag 10. Juni 2006, 21:51

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

Beitragvon BlackJack » Montag 12. Juni 2006, 07:18

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:

Beitragvon Rebecca » Montag 12. Juni 2006, 12:24

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

Re: C Funktion benötigt Filepointer

Beitragvon Joghurt » Montag 12. Juni 2006, 12:42

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)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder