Command Line Arguments in C

Command Line Arguments in C: वे Arguments जो Commands के साथ DOS Prompt पर देकर कोई काम किया जाता है, Command Line Arguments कहलाते हैं। जैसे जब हम किसी File को Command Prompt पर किसी File को Rename करते हैं, तो हमें Rename Command के साथ Source File व Target File का नाम देना होता है। ये Command व File Names Command Line Arguments कहलाते हैं।

हम कोई भी File जब “C” में बना कर उसे Compile कर लेते हैं, तो “C” उस File की उसी नाम से एक Executable File बना देता है। इस Executable File को Command Prompt से सीधे ही Execute किया जा सकता है। हम “C” में भी ऐसे Program बना सकते हैं, जिनमें Command Line Argument Accept करके उससे सम्बंधित काम किया जा सकता है। इसे समझने के लिए हम एक File Copy Program बनाते हैं।

// Program
#include<stdio.h>

main()
{
	FILE *fs, *ft;
	char ch;

	fs = fopen("Source.c", "r");
	if( fs == NULL )
	{
		perror("\n Could Not Open File");
	}

	ft = fopen("Target", "w");
	if( ft == NULL )
	{
		perror("\n Could Not Open File");
		fclose( fs );
	}

	while(1)
	{
		ch = fgetc( fs );
		if(ch == EOF)
		break;
		else 
		fputc(ch, ft);
	}

	fclose(fs);
	fclose(ft);
	printf("\n File Copied Successfully"
}

ये प्रोग्राम यदि Disk पर Source.c नाम की File होगी तो उसे Target.c नाम से Copy कर देगा। लेकिन चूंकि हमने दोनों Files का नाम Program के अंदर ही लिख दिया है, इसलिए हम इस Program को Dos Prompt पर जितनी भी बार Execute करेंगे, यही Source.c नाम की File Target.c नाम की File के रूप में Copy होगी। लेकिन हम चाहते हैं कि ये Program उस Files को Copy करे जिसे हम Argument के रूप में Command prompt पर दें।

इस प्रकार की जरूरत के लिए “C” में दो Library Variables हैं, जो main() Function को Argument Pass करने की क्षमता रखते हैं। यानी जिस प्रकार से हम किसी User Defined Function को Arguments Pass करते हैं, वैसे ही हम argv[]argc नाम के दो Library Variables का प्रयोग करके Command Prompt से main() Function को Argument Pass कर सकते हैं।

  • argc          ये एक Argument Counter है। इसे हमेंशा int प्रकार का Declare किया जाता है। ये Variable इस बात का ध्‍यान रखता है कि Command Prompt से कितने Arguments main() Function को प्राप्त हो रहे हैं।
  • argv[ ]       ये एक char प्रकार का Pointer Array है जिसकी Size argc के मान के बराबर होती है। ये एक प्रकार का “Pointers Of Array To String” होता है।

अब हम अभी बताए गए File Copy Program को ही इस प्रकार का लिख रहे हैं जिससे Command Prompt पर ही मनचाही File का नाम Enter करके उसे किसी और नाम से दूसरी File में Save कर सकते हैं:

// Program
#include<stdio.h>
main( int argc, char *argv[])
{
	FILE *fs, *ft;
	char ch;
	if( argc != 3 )
	{
		printf("Arguments Mismatch")
		exit();
	}
	
	fs = fopen("argv[1]", "r");
	if( fs == NULL )
	{
		perror("Could Not Open File");
	}
	ft = fopen("argv[2]", "w");

	if( ft == NULL )
	{
		perror("Could Not Open File");
		fclose( fs );
	}

	while(1)
	{
		ch = fgetc( fs );
		if(ch == EOF)
			break;
		else 
			fputc(ch, ft);
	}
	fclose(fs);
	fclose(ft);
	printf("File Copied Successfully");
}

इस File को Filecopy.c नाम से Save करके Compile करें व इस File को Execute करने के लिए DOS Prompt पर जाएं। वहां पर इस File को ठीक वैसे ही Use करें जिस प्रकार से हम Dos के Copy Command को किसी File को Copy करने के लिए करते हैं। माना हमें a.c नाम की file को b.c नाम की File के नाम से copy करना है तो हम निम्नानुसार Command Line पर Argument देंगे:

        c:\tc\bin>filecopy a.c b.c             Press Enter

        File Copied Successfully     

अब Dir command से check करें। A.c नाम की File B.c नाम से Copy हो चुकी है। आइये अब समझते है कि ये Program किस प्रकार काम कर रहा हैं। हमने main() Function के कोष्‍ठक में int argc, char *argv[] Statement दिया है। int argc कुल Input किये जाने वाले Arguments को Count करता है।

Dos Prompt पर किसी Argument के बीच Space मान्‍य नहीं है, इसलिए जैसे ही Command Line पर Space दिया जाता है, तो इस argc का मान एक अंक बढ जाता है। जब हम कोई File Name लिखते हैं तो वह नाम Memory में एक One-Dimensional Array के रूप में Store हो जाता है और इस Array का Base Address *argv में argc[0] यानी Array argc के Index Number 0 पर जाकर Store हो जाता है। यह एक बिना Define की गई Size का Array है, जिसमें उतने ही One-Dimensional Array के Base Address, Elements के रूप में Store होते हैं, जितने Argument के रूप में Dos Prompt पर दिये जाते हैं।

जब हम कोई File Name Dos Prompt पर लिख कर Space देते हैं, तो वह File Name जिस One Dimensional Array में जाकर Store हो रहा होता है, वह One-Dimensional Array Terminate हो जाता है। क्योंकि Space के मिलते ही यह Array उस Space को Null Character में Terminate कर देता है, जिससे String का अंत हो जाता है।

इस Space के मिलते ही int argc का मान बढ कर 1 हो जाता है। अब Space के बाद जब हम दूसरा नाम लिखते हैं, तो ये नाम भी Memory में किसी Location पर One Dimensional Array के रूप में Store हो जाता है और इस One Dimensional Array का Base Address भी Pointer Array argv के Index Number 1 पर जा कर Store हो जाता है।

जब हम यहां पर नाम Input करने के बाद वापस Space Press करते हैं, तो वापस int argc का मान बढ जाता है। ये क्रम तब तक चलता रहता है जब तक कि हम Command Prompt पर Arguments देते रहते हैं।

यहां हमने ये बताने की कोशिश की है, कि Dos Prompt से किस प्रकार से main() Function को Arguments Pass होते हैं। एक बात हमेंशा ध्‍यान रखें कि जब हमें main() Function को कोई Argument Pass करना होता है, तो प्रथम Argument के रूप में हमें हमेंशा उस File का नाम लिखना होता है, जिसे Use करना है।

argv[0] में हमेंशा Executable File का नाम Argument के रूप में main() Function को प्राप्त होना चाहिये। इसलिए इस Filecopy Program को उपयोग में लेते समय सबसे पहले Argument के रूप में इस EXECUTABLE File यानी filecopy लिखना होगा। यह नाम हमेंशा उस Program को Execute कर देगा जिससे हम किसी File को Copy कर सकेंगे। अब हम ये देखते हैं कि ये File Copy Program किस प्रकार Execute होता है और एक File को दूसरी File में Copy करता है।

सर्वप्रथम main() Function के कोष्‍ठक मे int argc, char *argv[] लिखा गया है, ताकि DOS Prompt से Arguments प्राप्त किये जा सकें। फिर दो File Pointer लिए गए हैं और एक char प्रकार का Variable ch Declare किया गया है।

हमें Command Prompt से कुल तीन Argument Accept करने हैं, पहला इस Executable File का नाम, दूसरा उस File का नाम जिसका Matter Copy करना है और तीसरा उस File का नाम जिसमें Matter को Copy करना है। इसलिए यहां एक if Condition दी गई है, कि यदि Command Prompt से आने वाले Arguments की संख्‍या तीन से कम या अधिक हो यानी तीन के बराबर ना हो, तो एक Error Message “Arguments Mismatch” Screen पर Print हो जाए व Program Control Program को Terminate कर दे।

फिर हमने निम्न Statement  द्वारा Command Prompt से प्राप्त दूसरे Argument के नाम की File को Reading Mode में Open किया है:

        fs = fopen(“argv[1]”, “r”);

क्योंकि Pointer Array के Index Number 1 पर उस File के नाम के One-Dimensional Array का Address है, जिसे Copy करना है। इस Statement से Copy की जाने वाली File Open हो जाती है। यदि जो File Name हमने Copy करने के लिए दिया है, वो File Disk पर मौजूद नहीं है, तो एक Error Message आता है और Program Terminate हो जाता है।

इसी प्रकार एक और File Open की है और इस File को Writing Mode में Open किया है। यह वह File है, जिसमें पहले वाली File का Matter Copy करना है। यहां हमने निम्न Statement  दिया है:

Buy this eBook to read more about “Command Line Arguments in C

File Operations in C - DBMS Example
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 GET DEMO REVIEWS