Low Level Disk I/O in C

C Programming Language in Hindi - BccFalna.com ये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook  C Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C Programming Language in Hindi | Page: 477 + 265 | Format: PDF

BUY NOW DOWNLOAD READ ONLINE

Low Level Disk I/O in C: अभी तक हमने जो भी पढा वो High Level Disk I/O के बारे में था। हमने जो Filecopy Program बनाया है, उस Program से केवल Text File ही Copy की जा सकती है। .exe या .com Files इस Program से Copy नहीं की जा सकती हैं।

जिस प्रकार से हम High Level Disk I/O में Character By Character Data को File पर Read या Write करते हैं, उस प्रकार से हम Low Level Disk I/O में नही कर सकते हैं। यदि हम ऐसा करते हैं, तो काम करने की गति बहुत ही कम हो जाती हैं। इसलिए Low Level Disk I/O के लिए हमें एक विशेष प्रकार के तरीके का प्रयोग करना पडता है।

इस तरीके में सबसे पहले एक निश्चित मात्रा की Memory Assign की जाती है। इस Assign की गई Memory को buffer कहते हैं। हम Low level Disk I/O के लिए अपना Data इस buffer में रखते हैं, जब तक कि buffer Full ना हो जाए। जब Buffer Full हो जाती है, तब इस buffer से Data को एक साथ Disk पर Write कर दिया जाता है। High level Disk I/O में ये buffer पहले से ही होता है, जो कि Invisible रहता है, जबकि Low level Disk I/O में हमें ये buffer Declare करना पडता है।

DOS में buffer की Optimal Size 512 characters की होती है। हम इसे अपनी सुविधानुसार कम या ज्‍यादा कर सकते हैं। लेकिन एक हद से अधिक करने पर Stack Over Flow की Problem आती है। इसलिए buffer Size Default रूप में 512 रखना ही ठीक रहता है। अभी हमने जो Filecopy Program बनाया है, उसी Program को Low Level Disk I/O के लिए File Copy प्रोग्राम में बदला जा रहा है। साथ ही समझाया जा रहा है कि किस प्रकार से Low Level Disk I/O के साथ काम किया जाता है।

// Program
#include <fcntl.h>
#include <types.h>
#include <stat.h>
main( int argc, char *argv[])
{
	char buffer[512];
	int input, output, bytes;
	input = open(argv[1], O_RDONLY | O_BINARY);

	if( input == -1 )
	{
		perror("Could Not Open File");
	}
	output=open(argv[2],O_CREAT | O_BINARY | O_WRONLY | S_IWRITE);
	if( output == -1)
	{
		perror("Could Not Open File");
		close( input );
	}

	while(1)
	{
		bytes = read(input, buffer, 512 );
		if( bytes > 0 )
			write ( output, buffer, 512);
		else 
		break;
	}
	close(input);
	close(output);
	printf("File Copied Successfully");
}

इस प्रोग्राम में हमने सर्वप्रथम char buffer[512]; का Declaration किया है। ये एक Array है, जो Low Level Disk I/O के लिए buffer का काम करता है। जो भी Data Disk से प्राप्त होता है, वो Data यहीं आ कर Store होता है। उसके बाद उस Data की Processing होती है।

Low Level Disk I/O में भी सारे काम उसी प्रकार से करने होते हैं, जिस प्रकार से High Level Disk I/O में किया जाता है। यानी सर्वप्रथम File Open की जाती है। Low level Disk I/O में File Open करने के लिए fopen() Function के बजाय केवल open() Function का प्रयोग किया जाता है। ये Function fopen() Function से बिल्कुल अलग है।

open() Function में Mode के रूप O_FLAGS का प्रयोग किया जाता है। ये O_FLAGES fcntl.h नाम की Header File में Define किये गए हैं। इसलिए Low Level Disk I/O के लिए इस Header File को Program में Include करना जरूरी होता है। जब दो या दो से अधिक Flags को Use करना होता है तब इनके बीच Bitwise OR  ( | ) Operator का प्रयोग करना जरूरी होता है। इस Header File में निम्नानुसार Mode Flags होते हैं:

O_APPEND एक File में नए  Data Add करने के लिए Open करता है।
O_CREAT एक नई File Create करता है। यदि File पहले से हो तो भी कोई फर्क नहीं पडता है।
O_RDONLY Reading के लिए एक नई File बनाता है।
O_RDWR Reading व Writing दोनों के लिए एक File Create करता है।
O_WONLY Writing के लिए एक File Create करता है।
O_BINARY Binary Mode मे एक File को Open करता है।
O_TEXT Text Mode में File Create करता है।

निम्न Statement द्वारा एक File Open किया जाता है, जिसका नाम Command Line Argument के दूसरे Argument से प्राप्त होता है:

        input = open(argv[1], O_RDONLY | O_BINARY);

इस Statement में Flage O_RDONLY से File Reading Mode में Open होगी और O_BINARY Flage के कारण ये File Binary Mode में Open होती है। जिस प्रकार से High Level Disk I/O में जब किसी File को Open किया जाता है, तो उस File का Address एक File Pointer में Return होता है।

उसी प्रकार से जब Low Level Disk I/O में कोई File Open की जाती है, तब एक Integer Value Return होती है। जब कोई File Low level Disk I/O में Create किया जाता है, तो Program Control हर File को एक Integer संख्‍या दे देता है। इस संख्‍या को File Handle कहते हैं।

जब कोई File ठीक से Open नही हो पाती है, तब open() Function File Handle के रूप में संख्‍या –1 Return करता है, जो कि ये बताता है कि File ठीक से Open नहीं हो सकी है। इसके बाद निम्न Statement द्वारा दूसरी File Open करते हैं:

        output = open(argv[2], O_CREAT | O_BINARY | O_WRONLY | S_IWRITE);

ये Target File है। O_CREAT Flag द्वारा इस Target File को Create किया गया है। हम इस File में Data Write करना चाहते हैं, इसलिए इस File को O_WRONLY Flage द्वारा केवल Writing Mode में Open किया गया है। O_BINARY Flage द्वारा File को Binary Mode मे Open किया गया है।

जब भी हम O_CREAT Flage का प्रयोग करते हैं, तो हमें इस Flage के साथ एक और Flage का प्रयोग करना पडता है, जो “C” Compiler को ये बताता है, कि जो File Create की गई है, उस File के साथ कैसा काम करना है।

यानी इस File को Read करना है या इस File में Data Write करना है। इसे Permission Argument कहते हैं और इन Permission Argument को Use करने के लिए हमें stat.hctype.h नाम की Header File को हमारे Program में Include करना जरूरी होता है। Permission Argument निम्न में से कोई एक होता है:

  • S_IWRITE    जब हम File में कुछ लिखना चाहते हैं।
  • S_IREAD     जब हम File से केवल Data पढना चाहते हैं।

आइये अब देखते हैं कि एक Low Level Disk I/O में File से Data कैसे Read किया जाता है। Low Level Disk I/O में Data Read करने के लिए हमने निम्न Statement  प्रयोग किया है:

        bytes = read(input, buffer, 512 );

read() Function Low Level Disk I/O में Data Reading का काम करता है। इसे Argument के रूप में input में Source File की संख्‍या, Buffer का नाम जिसमें Data Read करके Store करने हैं और Buffer की Size देनी होती है।

Buy this eBook to read more about “Low Level Disk I/O in C

Command Line Arguments in C

******

ये पोस्‍ट Useful लगा हो, तो Like कर दीजिए।

C Programming Language in Hindi - BccFalna.com ये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook  C Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C Programming Language in Hindi | Page: 477 + 265 | Format: PDF

BUY NOW DOWNLOAD READ ONLINE

Download All Hindi EBooks

सभी हिन्दी EBooks C, C++, Java, C#, ASP.NET, Oracle, Data Structure, VB6, PHP, HTML5, JavaScript, jQuery, WordPress, etc... के DOWNLOAD LINKS प्राप्‍त करें, अपने EMail पर।

Register करके Login करें। इस Popup से छुटकारा पाएें।