2013-04-13 19 views

Trả lời

17

POSIX cung cấp wordexp(3) để thực hiện mở rộng vỏ, bao gồm mở rộng dấu ngã.

4

Dấu ngã trong đường dẫn là điều cụ thể của trình bao. Bạn có thể làm gì nếu ký tự đầu tiên là dấu ngã và dấu gạch chéo (hoặc dấu đầu cuối của chuỗi), sau đó thay thế dấu ngã bằng giá trị của biến môi trường HOME (bạn có thể lấy từ getenv).

Nếu ký tự thứ hai là không dấu gạch chéo, rất có thể là ở dạng ~user/path. Sau đó, bạn phải trích xuất tên người dùng và sử dụng ví dụ: getpwnam để nhận mục nhập mật khẩu của người dùng, chứa thư mục chính của người dùng đó.

13

Bạn có thể sử dụng wordexp ví dụ dưới đây

#include <stdio.h> 
#include <wordexp.h> 

int main(int argc, char* argv[]) { 
    wordexp_t exp_result; 
    wordexp(argv[1], &exp_result, 0); 
    printf("%s\n", exp_result.we_wordv[0]); 
} 
+2

Nếu bạn sử dụng chức năng này trong một hàm, bạn sẽ muốn thêm 'wordfree (& exp_result);' để tránh rò rỉ bộ nhớ. – ishmael

Các vấn đề liên quan