CodeBlanks Logo Icon CodeBlanks

cffi

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

main.py
# cffi ile C fonksiyon çağır
# sonucu yazdır

Örnek çözüm

main.py
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?

main.py
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

Soru
ffi = FFI()
ffi.____('int abs(int);')
Cevap
ffi = FFI()
ffi.cdef('int abs(int);')

Açıklama: cdef, C imzasını bildirir.

Uzman bölümündeki tüm dersler