Tìm hiểu lệnh Linux - execv

execl, execlp, execle, execv, execvp - thực thi một tệp

Tóm tắc

#include

extern char ** environ;

int execl ( đường dẫn const char *, const char * arg , ...);
int execlp ( tập tin const char *, const char * arg , ...);
int execle ( đường dẫn const char * , const char * arg , ..., char * const envp []);
int execv ( đường dẫn const char * , char * const argv []);
int execvp ( tập tin const char * , char * const argv []);

Mô tả hàm exec

Gia đình của hàm exec thay thế hình ảnh tiến trình hiện tại bằng một hình ảnh quy trình mới. Các chức năng được mô tả trong trang hướng dẫn sử dụng này là giao diện người dùng cho hàm được thực thi (2). (Xem trang hướng dẫn sử dụng để thực hiện thông tin chi tiết về việc thay thế quy trình hiện tại.)

Đối số ban đầu cho các hàm này là tên đường dẫn của tệp sẽ được thực hiện.

Các const char * arg và các dấu ba chấm tiếp theo trong các hàm execl , execlpexecle có thể được coi là arg0 , arg1 , ..., argn . Họ cùng nhau mô tả một danh sách của một hoặc nhiều con trỏ đến các chuỗi null kết thúc đại diện cho danh sách đối số có sẵn cho chương trình thực hiện. Đối số đầu tiên, theo quy ước, nên trỏ đến tên tệp được liên kết với tệp đang được thực hiện. Danh sách các đối số phải được chấm dứt bằng con trỏ NULL .

Các hàm execvexecvp cung cấp một mảng các con trỏ tới các chuỗi null kết thúc đại diện cho danh sách đối số có sẵn cho chương trình mới. Đối số đầu tiên, theo quy ước, nên trỏ đến tên tệp được liên kết với tệp đang được thực hiện. Mảng con trỏ phải được kết thúc bằng con trỏ NULL .

Hàm execle cũng xác định môi trường của quá trình thực hiện bằng cách đi theo con trỏ NULL kết thúc danh sách các đối số trong danh sách tham số hoặc con trỏ tới mảng argv với tham số bổ sung. Tham số bổ sung này là một mảng các con trỏ tới các chuỗi được kết thúc bằng null và phải được chấm dứt bằng một con trỏ NULL . Các chức năng khác đưa môi trường cho hình ảnh xử lý mới từ môi trường biến bên ngoài trong tiến trình hiện tại.

Một số chức năng này có ngữ nghĩa đặc biệt.

Các hàm execlpexecvp sẽ lặp lại các hành động của trình bao trong việc tìm kiếm một tệp thi hành nếu tên tệp được chỉ định không chứa ký tự dấu gạch chéo (/). Đường dẫn tìm kiếm là đường dẫn được chỉ định trong môi trường bởi biến PATH . Nếu biến này không được chỉ định, đường dẫn mặc định ``: / bin: / usr / bin '' được sử dụng. Ngoài ra, một số lỗi nhất định được xử lý đặc biệt.

Nếu quyền bị từ chối cho một tệp (hàm đã thực hiện đã trả về EACCES ), các hàm này sẽ tiếp tục tìm kiếm phần còn lại của đường dẫn tìm kiếm. Tuy nhiên, nếu không tìm thấy tệp nào khác, chúng sẽ trở về với biến toàn cầu errno được đặt thành EACCES .

Nếu tiêu đề của một tệp không được nhận dạng ( hàm execed đã thử trả về ENOEXEC ), các hàm này sẽ thực thi trình bao với đường dẫn của tệp làm đối số đầu tiên của nó. (Nếu cố gắng này thất bại, không tìm kiếm thêm được thực hiện.)

Giá trị trả về của hàm exec

Nếu bất kỳ hàm exec nào trả về, một lỗi sẽ xảy ra. Giá trị trả về là -1 và biến toàn cục errno sẽ được đặt để chỉ ra lỗi.