C – Command Line Arguments

(Bài trước)

Người ta có thể truyền một số giá trị (value) từ dòng lệnh (command line) cho các chương trình C của bạn khi chúng được thực thi.  Các giá trị này được gọi là các đối số dòng lệnh (command line arguments). Chúng trở nên quan trọng với chương trình của bạn đặc biệt khi bạn muốn điều khiển chương trình từ bên ngoài thay vì code cứng các giá trị đó bên trong code.

Các đối số dòng lệnh được xử lý bằng cách sử dụng các đối số của hàm main() trong đó argc là số lượng đối số được truyền vào và argv[] là một mảng con trỏ (pointer array) trỏ đến mỗi đối số được truyền vào chương trình. Tiếp theo là một ví dụ đơn giản để kiểm tra xem có bất kỳ đối số nào được cung cấp từ command line không và thực thi hành động tương ứng:

#include <stdio.h>

int main( int argc, char *argv[] )  {

   if( argc == 2 ) {
      printf("The argument supplied is %s\n", argv[1]);
   }
   else if( argc > 2 ) {
      printf("Too many arguments supplied.\n");
   }
   else {
      printf("One argument expected.\n");
   }
}

Khi đoạn code trên được biên dịch và thực thi cùng với một đối số, nó sẽ cho kết quả như sau:

$./a.out testing
The argument supplied is testing

Khi đoạn code trên được biên dịch và thực thi cùng với hai đối số, nó sẽ cho kết quả như sau:

$./a.out testing1 testing2
Too many arguments supplied.

Khi đoạn code trên được biên dịch và thực thi không có đối số, nó sẽ cho kết quả như sau:

$./a.out
One argument expected

Cần chú ý rằng argv[0] nắm giữ tên của chính chương trình và argv[1] là một con trỏ tới đối số command line đầu tiên được cung cấp, và argv[n] là đối số cuối cùng. Nếu không cung cấp đối số, argc sẽ là 1, và nếu truyền vào một đối số thì argc sẽ là 2.

Tất cả đối số dòng lệnh bạn truyền vào được ngăn cách bằng khoảng trắng (space), nhưng nếu bản thân đối số có chứa khoảng trắng thì bạn phải truyền bằng cách đặt đối số nằm giữa dấu nháy kép (double quote) “” hoặc dấu nháy đơn (single quote) ‘’. Chúng ta hãy sửa lại ví dụ trên ở chỗ chương trình sẽ in ra tên của nó và chúng ta sẽ truyền vào một đối số dòng lệnh được đặt giữa dấu nháy kép.

#include <stdio.h>

int main( int argc, char *argv[] )  {

   printf("Program name %s\n", argv[0]);
 
   if( argc == 2 ) {
      printf("The argument supplied is %s\n", argv[1]);
   }
   else if( argc > 2 ) {
      printf("Too many arguments supplied.\n");
   }
   else {
      printf("One argument expected.\n");
   }
}

Khi đoạn code trên được biên dịch và thực thi cùng với một đối số có chứa khoảng trắng nhưng đặt giữa dấu nháy kép, nó sẽ cho kết quả như sau:

$./a.out "testing1 testing2"
Program name ./a.out
The argument supplied is testing1 testing2

Xem thêm bài viết định nghĩa Program Arguments của GNU

(Bài trước)

Icons made by Freepik from www.flaticon.com