Tôi đang cố gắng tạo một chương trình giao diện dòng lệnh lấy các dòng mã từ đầu vào của người dùng và thực thi chúng bằng execlp.
Tôi tự hỏi liệu có cách nào tốt hơn để viết mã của mình không.
execlp(cmd[0], cmd[0], cmd[1] cmd[2], cmd[3] NULL);
perror("Execlp");
Ví dụ người dùng nhập 4 từ, mỗi từ sẽ được lưu vào:
cmd[0] cmd[1] cmd[2] cmd[3]
Nếu chúng ta sử dụng cc helloworld.c -o helloworld
Hàm biên dịch sẽ yêu cầu mảng cmd[]
4 khoảng trống bên trong
Hoặc chúng tôi sử dụng./helloworld
nó sẽ được lưu trữ trong cmd[0]
và chạy nó, nó hoạt động rất tốt
Nhưng tôi giả sử nếu có một hàm yêu cầu nhiều hơn 4 từ, liệu chương trình của tôi có thể thực thi chúng không? Câu trả lời có lẽ là không, ví dụ: nếu có 5 từ trở lên, tôi không nghĩ chương trình của tôi có thể chạy được, trừ khi trong hàm của tôi nó hoạt động với 5 phần tử
execlp(cmd[0], cmd[0], cmd[1] cmd[2], cmd[3]. cmd[4], NULL);
hoặc
execlp(cmd[0], cmd[0], cmd[1] cmd[2], cmd[3], cmd[4], cmd[5], cmd[6], NULL);
perror("Execlp");
Có cách nào hiệu quả hơn để làm điều này? Bằng cách sử dụng exec()
Các chức năng khác trong chuỗi.
Cảm ơn:)
sử dụng execvp()
Thế còn nó thì sao? Ví dụ:
[BƯỚC 110] # cat execvp.c
#include
int
chính(int argc, char *argv[])
{
/* argv[argc] luôn là NULL */
execvp(argv[1], &argv[1]);
return 0;
}
[BƯỚC 111] # gcc -Wall execvp.c
[BƯỚC 112] # ./a.out echo 1
1
[BƯỚC 113] # ./a.out echo 1 2
1 2
[BƯỚC 114] # ./a.out echo 1 2 3
1 2 3
[BƯỚC 115] #
Tôi là một lập trình viên xuất sắc, rất giỏi!