cffi
- Python kursu
- Uzman
- Ders 22/47
- 5 dk
cffi ile C kodunu çağırmayı öğrenirsin.
cffi nedir?
cffi (C Foreign Function Interface), ctypes'a alternatif bir modüldür. C başlık dosyalarındaki bildirimleri doğrudan Python'da yazmanı sağlar.
Önce FFI nesnesi oluşturur, ffi.cdef ile C imzalarını bildirir, sonra ffi.dlopen ile kütüphaneyi yüklersin. ctypes'a göre iki avantajı vardır: imzalar C sözdiziminde yazılır (daha doğal) ve derleme anında tür denetimi yapılır. cffi, PyPy'de ctypes'tan daha hızlıdır.
cffi ile C kodu
cffi kullanımı üç adımdır: FFI() oluştur, ffi.cdef('int abs(int);') ile imzayı bildir, lib = ffi.dlopen(None) ile kütüphaneyi yükle.
Sonra lib.abs(-9) ile fonksiyonu çağırırsın. İmza C sözdiziminde olduğu için başlık dosyalarından kopyalamak kolaydır. cdef içindeki hatalar derleme anında yakalanır; ctypes'taki gibi çalışma anı çöküşleri olmaz. Bu, cffi'yi büyük C API'leri için daha güvenli kılar.
Uygulama cffi ile strlen çağır
from cffi import FFI ile modülü içe aktar. FFI() nesnesi oluştur. ffi.cdef('size_t strlen(const char*);') ile imzayı bildir. ffi.dlopen(None) ile kütüphaneyi yükle. lib.strlen(b"dunya") sonucunu yazdır.
Başlangıç kodu
# cffi ile C fonksiyon çağır
# sonucu yazdırÖrnek çözüm
from cffi import FFI
ffi = FFI()
ffi.cdef("size_t strlen(const char*);")
lib = ffi.dlopen(None)
print(lib.strlen(b"dunya"))Beklenen çıktı
5
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 cffi kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
FFI |
Arayüz nesnesi |
cdef |
C bildirimi |
dlopen |
Kütüphane yükler |
cffi |
ctypes alternifi |
2 cffi ne sağlar?
from cffi import FFI
ffi = FFI()
ffi.cdef('int abs(int);')- Python'dan SQL sorgu
- C bildirimlerini Python'da yazma Doğru cevap
- Web sayfası üretme
- Dosya sıkıştırma
Açıklama: cffi, C arayüzü için tasarlanmıştır.
3 cffi çağrısını tamamla
ffi = FFI()
ffi.____('int abs(int);')
ffi = FFI()
ffi.cdef('int abs(int);')
Açıklama: cdef, C imzasını bildirir.