কমান্ড লাইন আর্গুমেন্ট (Command line argument) কী এবং এর কাজ কী? সি-তে কীভাবে কমান্ড লাইন আর্গুমেন্ট নেয়া যায়?

asked 11 Sep '15, 16:34

Anisur%20Rahman%20Tonu's gravatar image

Anisur Rahman Tonu
20712

edited 13 Sep, 13:31

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
60618

1

প্রশ্নের টাইটেল খুবই বাজে হয়েছে। টাইটেল পড়ে প্রশ্নটা ঠিকমত বোঝা যাচ্ছে না। টাইটেলটি পরিবর্তন করুন। "Command Line Argument কি?" প্রশ্নের টাইটেল এরকম হতে পারে।

(13 Sep '15, 16:19) Ashfaqur Rahman

কমাইন্ড লাইন আর্গুমেন্ট

কোন অ্যাপলিকেশন বা সফ্টওয়্যারের সাথে মূলত দুইভাবে ইন্টারেকশন করা যায়। একভাবে হচ্ছে গ্রাফিক্স দেখে দেখে। যেমন ধরা যাক ফায়ারফক্স ব্রাউসার। আমরা যদি ব্রাউসার খুলি তাহলে এতে বিভিন্ন আইকন / চিহ্ন দেখব। মাউস দিয়ে সেসব আইকনে ক্লিক করে আমরা বিভিন্ন কাজ করতে পারব। যেমন ব্রাউসারের মেইন পেজে বিভিন্ন ট্যাবগুলোতে ক্লিক করলে বিভিন্ন ওয়েবসাইটে যাবে। উপরে অ্যাড্রেস বক্স আছে, যেখানে কোন ওয়েবসাইটের অ্যাড্রেস লিখে আমরা সেই ওয়েবসাইটে চলে যেতে পারি। আবার নতুন ট্যাব খোলার জন্য একটা প্লাস চিহ্ন আছে। এই ধরণের সফ্টওয়্যারকে GUI(Graphical User Interface) সফ্টওয়্যার। মানে যেসকল সফ্টওয়্যারের গ্রাফিক্স আছে। এবং সেসব গ্রাফিক্স মাধ্যমে আমরা ইন্টারেকশন করতে পারি বা বিভিন্ন নির্দেশ দিতে পারি।

আরেক ধরণের সফ্টওয়্যার আছে যেগুলোতে কোন গ্রাফিক্স থাকে না শুধুমাত্র কিবোর্ড দিয়ে টেক্সট লিখে লিখে কমান্ড দিয়ে সেগুলো চালাতে হয়। এধরণের প্রোগ্রামগুলো সাধারণত কমান্ড লাইন সফ্টওয়্যার / টার্মিনাল ইমুলেটর দিয়ে চালাতে হয়। যেমন উইন্ডোসের cmd, অথবা লিনাক্সের gnome-terminal হচ্ছে এরকম কিছু প্রোগ্রাম যারা কমান্ড লাইন প্রোগ্রাম চালাতে পারে। যেমন উইন্ডোসের DIR প্রোগ্রাম। এর কাছ হচ্ছে কোন একটা ডিরক্টরি বা ফোল্ডারের ভেতর যেসব ফোল্ডার এবং ফাইল আছে সেগুলোর তালিকা দেখানো। cmd খুলে C ড্রাইভে গিয়ে আমি যদি DIR লিখে ইন্টার চাপি। তাহলে এই DIR প্রোগ্রাম তখন cmd তে C ড্রাইভে যেসব ফাইলস এবং ফোল্ডার আছে তাদের লিস্ট দেখাবে। এধরণের প্রোগ্রামকে বলে কমান্ডলাইন প্রোগ্রাম বা CLI(Command Line Interface)। লিনাক্সের একইরকম প্রোগ্রাম হচ্ছে ls। এখন ধরা যাক C ড্রাইভে programs নামে একটা ফোল্ডার আছে। আমি চাই সেই ফোল্ডারের ভেতরের ফাইল এবং ফোল্ডারের লিস্ট দেখতে। তাহলে আমি cmd তে গিয়ে লিখব DIR programs। তখন DIR প্রোগ্রাম programs ফোল্ডারের ভেতরের ফাইল এবং ফোল্ডারগুলোর লিস্ট দেখাবে। তো কমাইন্ড লাইন প্রোগ্রামগুলোর গঠন মোটামুটি এরকম, প্রথমে প্রগ্রামের নামটা লিখতে হয় তারপর এর কিছু অপশন লিখতে হয়। এক্ষেত্রে যেমন DIR progrmas। এইযে DIR প্রোগ্রামটা চালানোর জন্য আমরা cmd / কমান্ড প্রম্পটে প্রথমে প্রোগ্রামের নাম এবং পরে এর অপশনগুলো লিখছি। এদের প্রত্যেকটাই একেকটা কমান্ডলাইন আর্গুমেন্ট। যেমন আগের উদাহরণে আমাদের কমান্ড লাইন আর্গুমেন্ট দুটি DIR এবং programs।

সি প্রোগ্রামিং ল্যাঙ্গুয়েজে যেভাবে কমান্ডলাইন আর্গুমেন্ট নেয়া যায়

ধরুন আমরা একটি প্রোগ্রাম লিখতে চাই যার কাজ হবে এটা নিজের নাম ছাড়া অন্য যে যে কমান্ডলাইন আর্গুমেন্টগুলো পাবে সেগুলো প্রিন্ট করবে। প্রোগ্রামের নাম দেয়া যাক echo। তারমানে হচ্ছে আমি যদি cmd / টার্মিনাল থেকে এরকম নিচের মত কমান্ড দেই

echo hello, world!

তাহলে স্ক্রিনে আউটপুট দেখাবে

hello, world!

উপরের উদাহরণে আর্গুমেন্ট ছিল তিনটি। প্রথমটা হচ্ছে প্রোগ্রামের নাম echo। এটা ছাড়া বাকিগুলো আমরা প্রিন্ট করেছি। এখানে লক্ষনীয় ব্যপার এই আর্গুমেন্টগুলো প্রত্যেকটিই কিন্তু একেকটি স্ট্রিং। সি এই স্ট্রিংগুলোকে argv[] (Argument Vector) এই ক্যারেক্টার পয়েন্টার অ্যারেতে রাখে। যার এককেকটি ইলিমেন্ট হচ্ছে একেকটি স্ট্রিং। যেমন আমারদের উদাহরণে argv[0] পেয়েন্ট করছে "echo" স্ট্রিংকে, arv[1] এবং argv[2] পয়েন্ট করছে যথাক্রমে "hello," এবং "world!" স্ট্রিংকে। আর আরেকটি ইন্টিজার argc (Argument Count) তে সে যতগুলো আর্গুমেন্ট পেয়েছে তা জমা রাখে। যেমন আমাদের উদাহরণে argc এর মান হবে 3। তাহলে argv[0] থেকে শুরু করে argv[argc - 1] পর্যন্ত হবে আমাদের কমান্ডলাইন আর্গুমেন্ট স্ট্রিংগুলোর পয়েন্টার। এই argv[] পয়েন্টার অ্যারে এবং argc ইন্টিজারকে প্যারামিটার হিসেবে main() ফাংশনে পাঠানো হয়।

আচ্ছা এবার তাহলে দেখা যাক C দিয়ে কিভাবে echo প্রোগ্রামটা লেখা যায়।

#include <stdio.h>

/* argc এবং *argv[] কে প্যারামিটার হিসেবে main ফাংশনে পাঠানো হচ্ছে */
/* argc কমাইন্ডলাইন থেকে আর্গুমেন্টের সংখ্যা এবং *argv[] আর্গুমেন্টগুলো পাঠাবে */
int main(int argc, char *argv[]){
    int i;

    /* যখন শুধুমাত্র প্রোগ্রামের নাম দেয়া হয়েছে এছাড়া আর কিছু দেয়া হয়নি */
    if(argc == 1){
        printf("Error: No string to print!\n");
        /* এখানেই প্রোগ্রাম শেষ হয়ে যাবে */
        return 0;
    }

    /* যদি argc, 1 এর চেয়ে বেশি হয় তবে নিচের কোডগুলো কাজ করবে*/

    /*i, 1 থেকে শুরু হল। যেহেতু আমরা argv[0] অর্থাৎ প্রোগ্রামের নাম প্রিন্ট করব না*/
    i = 1;

    /* argv[1] হতে argv[argc - 1] পর্যন্ত প্রিন্ট করব */
    while(i < argc){
        printf("%s", argv[i]);
        i++;
    }

    return 0;
}
permanent link

answered 13 Sep '15, 16:17

Ashfaqur%20Rahman's gravatar image

Ashfaqur Rahman
7839

edited 05 Oct '15, 04:05

c language main() function এ "Command Line Argument" কিভাবে কাজ করে ??

(16 Sep '15, 16:13) Anisur Rahman Tonu

আপনার প্রশ্নের টইটেল আপডেট করুন। কারণ আপনার প্রশ্ন দেখে বোঝার যাচ্ছে না যে আপনি একই সাথে এই উত্তরটাও চাচ্ছেন। "Command Line Arguments কি এবং C দিয়ে কিভাবে তা নেব?" প্রশ্নের টাইটেল এরকম হতে পারে। আপডেট করলে আমি আমার উত্তর আপডেট করে দিব। অথবা এটা নিয়ে আলাদা একটা প্রশ্ন করুন।

আর কোন উত্তর পছন্দ হলে সেটাকে আপভোট করুন। অনেকগুলো উত্তরের মধ্যে যেটা সবচেয়ে ভাল হবে সেটাকে "Best Answer" হিসেবে চিহ্নিত করুন। তাতে অন্যরা একই সমস্যায় পড়লে এখানে এসে সহজেই বুঝতে পারবে যে এই প্রশ্নের ভাল উত্তর রয়েছে।

দয়া করে FAQ অংশ পড়ে নিন - http://programabad.com/faq/

(16 Sep '15, 20:59) Ashfaqur Rahman

জি ভাইয়া Ques Update করে দিসি .........। এবার Ans টা দিন ধন্যবাদ

(17 Sep '15, 16:05) Anisur Rahman Tonu
Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×395
×9
×1

question asked: 11 Sep '15, 16:34

question was seen: 1,411 times

last updated: 13 Sep, 13:31