Translate

Input-Output System Calls in C: C Programming में I/O System Calls की पूरी गाइड

अगर आप C Programming सीख रहे हैं, तो आपने शायद printf() और scanf() जैसे functions जरूर इस्तेमाल किए होंगे। लेकिन क्या आपने कभी सोचा है कि इनके पीछे वास्तव में क्या होता है?

असल में, Operating System और प्रोग्राम के बीच डेटा भेजने या प्राप्त करने के लिए Input-Output System Calls का इस्तेमाल होता है।

ये I/O System Calls in C प्रोग्राम को सिस्टम के साथ सीधे संवाद करने की शक्ति देते हैं — जैसे फाइल पढ़ना, फाइल में डेटा लिखना, या किसी डिवाइस से जानकारी लेना।

Input-Output System Calls in C: पूरी गाइड (C Programming में I/O System Calls समझें)

इस लेख में हम Input-Output System Calls in C को बेहद आसान भाषा में समझेंगे — उदाहरण, स्टेप्स और प्रैक्टिकल उपयोग के साथ।

Table of Contents

Input-Output System Calls क्या हैं?

Input-Output System Calls in C वे functions हैं जिनकी मदद से कोई program सीधे Operating System से बात कर सकता है।

इनका मुख्य उद्देश्य है:

  • फाइल खोलना
  • फाइल पढ़ना
  • फाइल में लिखना
  • फाइल बंद करना

जब आपका प्रोग्राम किसी फाइल से डेटा पढ़ता है या उसमें डेटा लिखता है, तो वह I/O System Calls का इस्तेमाल करता है।

सरल उदाहरण

मान लीजिए आपका प्रोग्राम एक नोटबुक है और Operating System एक लाइब्रेरियन।

जब आपको किताब चाहिए, तो आप सीधे शेल्फ से नहीं लेते। आप लाइब्रेरियन से कहते हैं।

वैसे ही Input-Output System Calls प्रोग्राम और सिस्टम के बीच मध्यस्थ का काम करते हैं।

System Call Architecture (User Mode vs Kernel Mode)

जब कोई C program Input-Output System Calls का उपयोग करता है, तो वास्तव में वह सीधे हार्डवेयर से बात नहीं करता।

इसके बजाय यह प्रक्रिया इस तरह काम करती है:

User Program
     ↓
C Standard Library (libc)
     ↓
System Call Interface
     ↓
Kernel
     ↓
File System / Device Driver

यहाँ दो महत्वपूर्ण execution modes होते हैं:

  • User Mode – जहाँ आपका program चलता है
  • Kernel Mode – जहाँ Operating System चलता है

जब read() या write() जैसे I/O System Calls execute होते हैं, तो CPU temporarily User Mode से Kernel Mode में switch करता है।

इसी वजह से system calls library functions से थोड़े slow हो सकते हैं, लेकिन ये अधिक powerful और direct होते हैं।

Library Functions vs System Calls

Library Function System Call
printf() write()
scanf() read()
fopen() open()
fclose() close()

Library Functions आमतौर पर System Calls का उपयोग करके काम करती हैं।

इसलिए अगर आप Input-Output System Calls in C समझ लेते हैं, तो आपको C Programming की अंदरूनी प्रक्रिया भी समझ आने लगती है।

मुख्य I/O System Calls in C

C Programming में सबसे ज़्यादा इस्तेमाल होने वाले Input-Output System Calls ये हैं:

  • open()
  • read()
  • write()
  • close()

इन सभी I/O System Calls का इस्तेमाल Linux और Unix आधारित सिस्टम में व्यापक रूप से होता है।

creat() System Call (File Creation)

C Programming में creat() system call का उपयोग एक नई empty file बनाने के लिए किया जाता है। यह low-level file creation mechanism है जो सीधे Operating System kernel से interact करता है।

Syntax

int creat(const char *filename, mode_t mode);

Parameters

  • filename – फाइल का नाम
  • mode – file permissions

Example

#include <fcntl.h>
#include <unistd.h>

int fd = creat("newfile.txt", 0644);

यह system call एक नई file create करता है और उसका file descriptor return करता है। अगर error हो जाए तो यह -1 return करता है।

open() System Call

open() system call का उपयोग किसी फाइल को खोलने के लिए किया जाता है।

Syntax

int open(const char *pathname, int flags);

Example

int fd = open("data.txt", O_RDONLY);

यहाँ:

  • data.txt → फाइल का नाम
  • O_RDONLY → Read Only मोड

जब open() सफल होता है तो वह एक File Descriptor लौटाता है।

open() Flags Explained

Flag Meaning
O_RDONLY फाइल को केवल पढ़ने के लिए खोलता है
O_WRONLY फाइल को केवल लिखने के लिए खोलता है
O_RDWR फाइल पढ़ने और लिखने दोनों के लिए
O_CREAT अगर फाइल मौजूद नहीं है तो नई फाइल बनाता है
O_APPEND डेटा हमेशा फाइल के अंत में जोड़ा जाएगा
O_TRUNC फाइल खोलते समय उसका पुराना डेटा हट जाता है

Advanced programs में अक्सर multiple flags का उपयोग किया जाता है।

int fd = open("data.txt", O_WRONLY | O_CREAT | O_APPEND, 0644);

Absolute Path vs Relative Path

जब हम open() system call का उपयोग करते हैं, तो file path दो प्रकार से दिया जा सकता है:

  • Absolute Path – Root directory से पूरा path
  • Relative Path – Current directory से path

Example

open("/home/user/data.txt", O_RDONLY);   // Absolute path

open("data.txt", O_RDONLY);              // Relative path

Production applications में अक्सर absolute paths का उपयोग किया जाता है।

read() System Call

read() system call फाइल से डेटा पढ़ने के लिए उपयोग होता है।

Syntax

ssize_t read(int fd, void *buf, size_t count);

Example

read(fd, buffer, 100);

यह 100 bytes तक डेटा पढ़ सकता है।

इस तरह Input-Output System Calls in C फाइल से डेटा लाने का काम करते हैं।

read() Return Value Explained

read() system call हमेशा requested bytes नहीं पढ़ता। यह actual bytes read का value return करता है।

Return Value Meaning
Positive Integer Bytes successfully read from the file
0 End of File (EOF) — अब पढ़ने के लिए कोई डेटा नहीं बचा
-1 Error occurred during read operation

write() System Call

write() system call फाइल या डिवाइस में डेटा लिखने के लिए उपयोग होता है।

Syntax

ssize_t write(int fd, const void *buf, size_t count);

Example

write(fd, "Hello World", 11);

यह Hello World को फाइल में लिख देगा।

इसी वजह से I/O System Calls in C low-level file operations के लिए बेहद महत्वपूर्ण हैं।

close() System Call

काम खत्म होने के बाद फाइल को बंद करना जरूरी होता है।

Syntax

int close(int fd);

Example

close(fd);

यह सिस्टम संसाधनों को मुक्त कर देता है।

File Descriptor Explained

File Descriptor एक integer number होता है जो open file को represent करता है।

Unix/Linux में default file descriptors होते हैं:

Descriptor Meaning
0 Standard Input (stdin)
1 Standard Output (stdout)
2 Standard Error (stderr)

उदाहरण:

write(1, "Hello", 5);

यह टेक्स्ट को सीधे terminal पर दिखाएगा।

File Descriptor Table in Operating System

Operating System प्रत्येक process के लिए एक File Descriptor Table maintain करता है। इस table में integer values (fd) pointers के रूप में stored होती हैं जो open files को represent करती हैं।

जब कोई program open() या creat() call करता है:

  • Kernel एक file table entry बनाता है
  • File descriptor table में एक entry allocate होती है
  • Program को एक integer fd return किया जाता है
Process
   ↓
File Descriptor Table
   ↓
File Table Entry
   ↓
Actual File on Disk

Error Handling in System Calls

Production-level C programs में system calls का उपयोग करते समय error checking अनिवार्य होता है।

int fd = open("data.txt", O_RDONLY);

if(fd == -1){
 perror("File open failed");
 return 1;
}

अगर system call fail हो जाए तो errno variable error code प्रदान करता है।

System Calls vs Buffered I/O Performance

C programming में दो प्रकार के I/O approaches होते हैं:

Method Example Performance
Buffered I/O fread(), fwrite() Large data के लिए faster क्योंकि buffering उपयोग होती है
System Calls read(), write() Direct kernel access, लेकिन कई बार slower हो सकता है

High-performance applications जैसे database engines अक्सर custom buffering strategy का उपयोग करते हैं।

प्रैक्टिकल Example

#include <fcntl.h>
#include <unistd.h>

int main() {

int fd;
char buffer[100];

fd = open("data.txt", O_RDONLY);
read(fd, buffer, 100);
write(1, buffer, 100);
close(fd);

return 0;

}

यह प्रोग्राम:

  • फाइल खोलता है
  • डेटा पढ़ता है
  • स्क्रीन पर दिखाता है
  • फाइल बंद करता है

यही Input-Output System Calls in C का बेसिक वर्कफ़्लो है।

Real Systems That Use I/O System Calls

  • Linux Shell Commands (cat, cp, grep)
  • Web Servers
  • Database Engines
  • Log Processing Tools
  • Operating System Utilities

उदाहरण के लिए Linux का cat command file पढ़ने के लिए read() और output दिखाने के लिए write() का उपयोग करता है।

Real Life Use Cases

I/O System Calls कई जगह इस्तेमाल होते हैं:

  • Operating Systems
  • File Managers
  • Database Engines
  • Servers
  • Device Drivers

अगर आप System Programming या Embedded Programming सीखना चाहते हैं, तो Input-Output System Calls in C समझना बेहद जरूरी है।

Security Considerations

System programming करते समय निम्न security issues से बचना जरूरी है:

  • Buffer overflow vulnerabilities
  • File permission errors
  • Race conditions
  • Unvalidated user input

Secure coding practices production applications के लिए अत्यंत महत्वपूर्ण हैं।

Best Practices

जब आप I/O System Calls in C का उपयोग करें, तो ये टिप्स याद रखें:

  • हमेशा error checking करें
  • फाइल उपयोग के बाद close() जरूर करें
  • buffer overflow से बचें
  • File Descriptor को सुरक्षित रखें

ये छोटे कदम आपके कोड को ज्यादा सुरक्षित और efficient बनाते हैं।

Multiple File Descriptors for Same File

अगर एक ही file को multiple file descriptors से open किया जाए, तो प्रत्येक descriptor का अपना file position होता है।

int fd1 = open("sample.txt", O_RDONLY);
int fd2 = open("sample.txt", O_RDONLY);

char c;

read(fd1, &c, 1);
read(fd2, &c, 1);

इस case में fd1 और fd2 दोनों अलग-अलग file offsets maintain करते हैं। इसलिए दोनों reads file के first byte को पढ़ सकते हैं।

Signal Interrupt Behavior

कभी-कभी system calls जैसे read() और write() signals के कारण interrupt हो सकते हैं।

  • अगर कोई data write नहीं हुआ → return -1
  • अगर partial write हुआ → bytes written return

इसलिए production programs में return value हमेशा check करना चाहिए।

Required Header Files for I/O System Calls

#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
  • unistd.h – read(), write(), close()
  • fcntl.h – open() flags
  • errno.h – error codes

File Permission Modes

जब file create की जाती है तो permissions specify करनी होती हैं।

0644
Permission Meaning
6 Owner: read + write permission
4 Group: read permission
4 Others: read permission

FAQs: Input-Output System Calls in C

1. Input-Output System Calls क्या होते हैं?

ये ऐसे functions होते हैं जिनकी मदद से C program Operating System से input और output operations के लिए संवाद करता है।

2. C में मुख्य I/O System Calls कौन से हैं?

open(), read(), write(), close() सबसे सामान्य system calls हैं।

3. System Calls और Library Functions में क्या अंतर है?

Library Functions high-level होते हैं जबकि System Calls सीधे Operating System से interact करते हैं।

4. File Descriptor क्या होता है?

यह एक integer number होता है जो खुली हुई फाइल की पहचान करता है।

5. क्या System Calls Linux में ही उपयोग होते हैं?

System Calls Unix और Linux आधारित सिस्टम में प्रमुख रूप से उपयोग किए जाते हैं।

📌 Further reading

Next
This is the most recent post.
Previous
Older Post

Post a Comment

Blogger

Your Comment Will be Show after Approval , Thanks

Support Our Content

Pay via UPI
Works with: GPay | PhonePe | Paytm | BHIM
anurajk.com@ptyes


More Payment Options / Scan QR →

Ads

 
↑ Top