การสร้างเครื่องมือ CLI
ตัวอย่างการใช้งานจริง
การสร้างเครื่องมือ CLI เป็นบทเรียน C Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน
การนำทุกส่วนมาประกอบกัน
ตอนนี้เราจะรวมอาร์กิวเมนต์ ออปชัน และการแยกวิเคราะห์เข้าด้วยกันเป็นเครื่องมือ CLIขนาดเล็กแต่สมบูรณ์
ตัวอย่างของเราคือเครื่องมือจัดรูปแบบตัวเลข ซึ่งอ่านค่าและออปชันบางรายการ แล้วพิมพ์ผลลัพธ์ออกมา
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: %s <number>\n", argv[0]);
return 1;
}
printf("You passed: %s\n", argv[1]);
return 0;
}การออกแบบส่วนติดต่อ
เครื่องมือ CLI ที่ดีจะกำหนดส่วนติดต่อไว้ล่วงหน้า เครื่องมือของเราจะรองรับ:
-vแสดงผลแบบละเอียด-r Nทำซ้ำผลลัพธ์ N ครั้ง- อาร์กิวเมนต์ตามตำแหน่งหนึ่งรายการ: ข้อความที่จะพิมพ์
#include <stdio.h>
int main(void) {
printf("Interface: prog [-v] [-r N] <text>\n");
return 0;
}การประกาศการตั้งค่า
เก็บพฤติกรรมที่ปรับค่าได้แต่ละรายการไว้ในตัวแปรที่มีค่าเริ่มต้นเหมาะสม วิธีนี้ช่วยแยกการแยกวิเคราะห์ออกจากงานจริง
#include <stdio.h>
int main(void) {
int verbose = 0;
int repeat = 1;
const char *text = NULL;
printf("defaults: verbose=%d repeat=%d\n", verbose, repeat);
return 0;
}การแยกวิเคราะห์ด้วย getopt
ใช้ getopt เพื่อกำหนดค่าธง -r รับค่า ดังนั้นรายการของมันในออปต์สตริงคือ r:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
int verbose = 0, repeat = 1, opt;
while ((opt = getopt(argc, argv, "vr:")) != -1) {
if (opt == 'v') verbose = 1;
else if (opt == 'r') repeat = atoi(optarg);
}
printf("verbose=%d repeat=%d\n", verbose, repeat);
return 0;
}การอ่านอาร์กิวเมนต์ตามตำแหน่ง
หลังจาก getopt แล้ว optind จะชี้ไปยังอาร์กิวเมนต์ที่ไม่ใช่ออปชันตัวแรก เราจะดึงข้อความจากตำแหน่งนั้น
หากไม่มีอาร์กิวเมนต์ดังกล่าว เราจะพิมพ์วิธีใช้งานและจบการทำงานด้วยรหัสข้อผิดพลาด
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
while (getopt(argc, argv, "vr:") != -1) { }
if (optind >= argc) {
printf("Error: missing text argument\n");
return 1;
}
printf("text = %s\n", argv[optind]);
return 0;
}การตรวจสอบข้อมูลเข้าตัวเลข
เครื่องมือที่รัดกุมจะตรวจสอบว่า -r ได้รับตัวเลขที่เหมาะสม ปฏิเสธจำนวนครั้งที่เป็นศูนย์หรือติดลบ
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
int repeat = 1, opt;
while ((opt = getopt(argc, argv, "r:")) != -1) {
if (opt == 'r') repeat = atoi(optarg);
}
if (repeat < 1) {
printf("Error: repeat must be >= 1\n");
return 1;
}
printf("repeat = %d\n", repeat);
return 0;
}การทำงานจริง
เมื่อแยกวิเคราะห์และตรวจสอบการตั้งค่าแล้ว ให้ดำเนินงานจริง ในที่นี้เราจะพิมพ์ข้อความ repeat ครั้ง
#include <stdio.h>
int main(void) {
const char *text = "hello";
int repeat = 3;
for (int i = 0; i < repeat; i++) {
printf("%s\n", text);
}
return 0;
}ผลลัพธ์แบบละเอียด
ธงแบบละเอียดสามารถเพิ่มข้อมูลวินิจฉัยได้ ให้ครอบการพิมพ์ดังกล่าวไว้ภายใต้เงื่อนไขของธง เพื่อให้ผลลัพธ์ปกติยังคงสะอาด
#include <stdio.h>
int main(void) {
int verbose = 1;
const char *text = "hi";
if (verbose) printf("[debug] about to print text\n");
printf("%s\n", text);
return 0;
}เครื่องมือฉบับสมบูรณ์
ต่อไปนี้คือโปรแกรมฉบับเต็มที่เชื่อมทุกส่วนเข้าด้วยกัน: แยกวิเคราะห์ ตรวจสอบ แล้วจึงทำงาน
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
int verbose = 0, repeat = 1, opt;
while ((opt = getopt(argc, argv, "vr:")) != -1) {
if (opt == 'v') verbose = 1;
else if (opt == 'r') repeat = atoi(optarg);
}
if (optind >= argc) { printf("Usage: prog [-v] [-r N] <text>\n"); return 1; }
const char *text = argv[optind];
if (verbose) printf("[debug] repeat=%d\n", repeat);
for (int i = 0; i < repeat; i++) printf("%s\n", text);
return 0;
}รหัสออกมีความสำคัญ
เครื่องมือ CLI สื่อสารความสำเร็จผ่านรหัสออก ให้คืนค่า 0 เมื่อสำเร็จ และคืนค่าที่ไม่ใช่ศูนย์เมื่อเกิดข้อผิดพลาด
สคริปต์และโปรแกรมอื่น ๆ อาศัยค่านี้เพื่อตัดสินใจว่าจะทำอะไรต่อ
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("failure\n");
return 2;
}
printf("success\n");
return 0;
}การเขียนข้อผิดพลาดไปยัง stderr
ตามธรรมเนียม ผลลัพธ์ปกติจะไปที่ stdout และข้อผิดพลาดจะไปที่ stderr ผ่าน fprintf(stderr, ...)
วิธีนี้ทำให้ผู้ใช้แยกผลลัพธ์ออกจากข้อมูลวินิจฉัยได้เมื่อเปลี่ยนเส้นทางผลลัพธ์
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
fprintf(stderr, "Error: need an argument\n");
return 1;
}
printf("%s\n", argv[1]);
return 0;
}ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจของคุณเกี่ยวกับธรรมเนียมของเครื่องมือ CLI
สรุปทบทวน
คุณได้สร้างเครื่องมือ CLI ที่สมบูรณ์:
- กำหนดส่วนติดต่อ และประกาศการตั้งค่าพร้อมค่าเริ่มต้น
- แยกวิเคราะห์ธงด้วย
getoptและอ่านอาร์กิวเมนต์ตามตำแหน่งจากoptind - ตรวจสอบข้อมูลเข้าก่อนเริ่มทำงาน
- คืนค่ารหัสออกที่มีความหมาย และส่งข้อผิดพลาดไปยัง
stderr
คำถามที่พบบ่อย
บทเรียน “การสร้างเครื่องมือ CLI” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การสร้างเครื่องมือ CLI” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การสร้างเครื่องมือ CLI”
ตัวอย่างการใช้งานจริง คุณปฏิบัติ C Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การสร้างเครื่องมือ CLI” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C Academy นี้ได้ไหม
ได้ บทเรียน C Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- argc และ argv
- การแยกวิเคราะห์ตัวเลือก
- getopt
- การสร้างเครื่องมือ CLI