Python Academy · पाठ

ctypes: Python से C लाइब्रेरी कॉल करना

साझा लाइब्रेरी लोड करें और ctypes से C फ़ंक्शन कॉल करें।

पाठ 2, कुल 4 में से13 चरण

ctypes: Python से C लाइब्रेरी कॉल करना, CoddyKit पर Python Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Python Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

ctypes क्या है?

ctypes साझा C लाइब्रेरी लोड करने और Python से उनके फ़ंक्शन कॉल करने के लिए मानक लाइब्रेरी का मॉड्यूल है—इसके लिए संकलन की आवश्यकता नहीं होती।

import ctypes

# Load the C standard library
libc = ctypes.CDLL("libc.so.6")   # Linux
# libc = ctypes.CDLL("libSystem.dylib")  # macOS

libc.puts(b"Hello from C!")

लाइब्रेरियाँ लोड करना

cdecl कॉलिंग कन्वेंशन के लिए ctypes.CDLL का उपयोग करें (अधिकांश C लाइब्रेरी के लिए) और Windows stdcall API के लिए WinDLL का उपयोग करें।

import ctypes

# Platform-independent approach:
import ctypes.util
libm_name = ctypes.util.find_library("m")
libm = ctypes.CDLL(libm_name)

result = libm.sqrt
result.restype = ctypes.c_double
result.argtypes = [ctypes.c_double]
print(result(2.0))   # 1.4142...

C डेटा प्रकार

ctypes क्लास का उपयोग करके Python प्रकारों को C प्रकारों से मैप करें: c_int, c_double, c_char_p, c_void_p आदि।

import ctypes

x = ctypes.c_int(42)
print(x.value)   # 42

d = ctypes.c_double(3.14)
print(d.value)   # 3.14

s = ctypes.c_char_p(b"hello")
print(s.value)   # b"hello"

argtypes और restype सेट करना

प्रकारों के मेल न खाने से होने वाले मौन क्रैश से बचने के लिए हमेशा argtypes (पैरामीटर प्रकार) और restype (लौटाया जाने वाला प्रकार) घोषित करें।

import ctypes, ctypes.util

libm = ctypes.CDLL(ctypes.util.find_library("m"))

libm.pow.argtypes = [ctypes.c_double, ctypes.c_double]
libm.pow.restype  = ctypes.c_double

print(libm.pow(2.0, 10.0))   # 1024.0

पॉइंटर पास करना

C चर का पॉइंटर पास करने के लिए ctypes.byref(var) या ctypes.pointer(var) का उपयोग करें।

import ctypes

libc = ctypes.CDLL(None)   # None = current process

value = ctypes.c_int(0)
# Passing pointer to C function:
# libc.some_func(ctypes.byref(value))
print(value.value)

स्ट्रक्चर

ctypes.Structure से सबक्लास बनाकर और _fields_ की सूची देकर C स्ट्रक्चर परिभाषित करें।

import ctypes

class Point(ctypes.Structure):
    _fields_ = [
        ("x", ctypes.c_double),
        ("y", ctypes.c_double),
    ]

p = Point(1.0, 2.0)
print(p.x, p.y)   # 1.0 2.0

ऐरे

TypeClass * N की सहायता से C ऐरे बनाएँ।

import ctypes

IntArray5 = ctypes.c_int * 5
arr = IntArray5(10, 20, 30, 40, 50)
for v in arr:
    print(v, end=" ")   # 10 20 30 40 50

callback (फ़ंक्शन पॉइंटर)

किसी Python फ़ंक्शन को callback के रूप में पास करने योग्य C-कॉल करने योग्य फ़ंक्शन बनाने के लिए ctypes.CFUNCTYPE का उपयोग करें।

import ctypes

CompareFunc = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_int, ctypes.c_int)

def my_compare(a, b):
    return a - b

c_compare = CompareFunc(my_compare)
# Pass c_compare to a C function expecting a comparator

Windows DLL लोड करना

Windows पर stdcall कन्वेंशन का उपयोग करने वाली DLL के लिए ctypes.WinDLL का उपयोग करें (जैसे, Windows API)।

import ctypes   # Windows only

kernel32 = ctypes.WinDLL("kernel32", use_last_error=True)
kernel32.GetTickCount.restype = ctypes.c_ulong
print(kernel32.GetTickCount())

त्रुटि प्रबंधन

ctypes.get_last_error() (Windows) की जाँच करें या विशेष मानों के रूप में लौटाई गई त्रुटियों के लिए Python-स्तरीय try/except का उपयोग करें।

import ctypes

# Many C functions return -1 or NULL on error:
result = some_c_function()
if result == -1:
    raise OSError("C function failed")

# For errno on POSIX:
import os
if result < 0:
    raise OSError(os.strerror(ctypes.get_errno()))

व्यावहारिक उदाहरण: OpenSSL के साथ SHA-256

किसी Python बाइंडिंग लाइब्रेरी के बिना ctypes के माध्यम से सीधे OpenSSL का SHA256 कॉल करें।

import ctypes, ctypes.util

libcrypto = ctypes.CDLL(ctypes.util.find_library("crypto"))

SHA256 = libcrypto.SHA256
SHA256.argtypes = [ctypes.c_char_p, ctypes.c_size_t, ctypes.c_char_p]
SHA256.restype  = ctypes.c_char_p

buf = ctypes.create_string_buffer(32)
SHA256(b"hello", 5, buf)
print(buf.raw.hex())

त्वरित जाँच

ctypes फ़ंक्शन पर हमेशा argtypes और restype क्यों सेट करना चाहिए?

पुनरावलोकन

ctypes साझा C लाइब्रेरी को बिना संकलन के लोड करता है। प्रत्येक फ़ंक्शन पर argtypes और restype घोषित करें। C स्ट्रक्चर के लिए Structure, ऐरे के लिए TypeClass * N और callback के लिए CFUNCTYPE का उपयोग करें।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Python सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
76
पाठ
320

अक्सर पूछे जाने वाले प्रश्न

क्या “ctypes: Python से C लाइब्रेरी कॉल करना” पाठ निःशुल्क है?

हाँ—“ctypes: Python से C लाइब्रेरी कॉल करना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Python Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“ctypes: Python से C लाइब्रेरी कॉल करना” में मैं क्या सीखूँगा?

साझा लाइब्रेरी लोड करें और ctypes से C फ़ंक्शन कॉल करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Python Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Python Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Python Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“ctypes: Python से C लाइब्रेरी कॉल करना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Python Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Python Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. C एक्सटेंशन क्यों? उपयोग और समझौते
  2. ctypes: Python से C लाइब्रेरी कॉल करना
  3. cffi: C फ़ॉरेन फ़ंक्शन इंटरफ़ेस
  4. Python C एक्सटेंशन मॉड्यूल लिखना
← Python Academy पर वापस जाएँ