chdir("~/")
dường như không hoạt động. Tôi có dự kiến sẽ nhìn vào chuỗi và thay thế dấu ngã bằng tay, hay là có cách nào tốt hơn?Làm thế nào để tôi đạt được sự khai triển dấu ngã trong C?
Trả lời
POSIX cung cấp wordexp(3)
để thực hiện mở rộng vỏ, bao gồm mở rộng dấu ngã.
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 đó.
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]);
}
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
- 1. ZeroMQ: làm thế nào để đạt được sự đa luồng giống như C
- 2. C# Generics được triển khai như thế nào?
- 3. Triển khai Đánh dấu cho C/C++
- 4. Làm cách nào để triển khai gọi lại trong C++?
- 5. làm thế nào để đạt được phân trang trong lucene?
- 6. Làm cách nào để triển khai trình tạo trong C++?
- 7. Làm thế nào để triển khai Scrum?
- 8. Làm cách nào để sử dụng dấu '~' (dấu ngã) trong ngữ cảnh của đường dẫn?
- 9. Làm thế nào để đạt được vào cuối của TextArea
- 10. HttpSession được triển khai như thế nào?
- 11. Sự đa thừa kế của C++ được triển khai như thế nào?
- 12. Làm thế nào để java.awt.dialog đạt được phương thức?
- 13. Làm thế nào để đạt được tải chậm với RequireJS?
- 14. OpenID được triển khai như thế nào?
- 15. Làm thế nào để đạt được mặt nạ UIView động?
- 16. Làm cách nào để triển khai các sự kiện thông qua giao diện trong C#?
- 17. Làm cách nào để __slots__ được triển khai bằng Python?
- 18. C++ - Triển khai luồng của riêng tôi
- 19. Làm cách nào để triển khai bộ?
- 20. Sự khác biệt giữa $ HOME và '~' (dấu ngã)?
- 21. Triển khai RAII trong C#
- 22. "Gọi lại" trong C là gì và chúng được triển khai như thế nào?
- 23. Làm cách nào để triển khai thẻ trong Symfony 2?
- 24. Làm thế nào để triển khai một máy khách OData động trong C#?
- 25. Tôi nên triển khai "khoảng thời gian yên tĩnh" như thế nào khi tăng sự kiện?
- 26. Các mảng được triển khai trong java như thế nào?
- 27. Làm cách nào có thể triển khai các hàm ảo C++ trong C
- 28. Delphi: Làm thế nào để triển khai QueryInterface của IUnknown?
- 29. Tùy chọn BarSpacing thực sự được triển khai như thế nào trong Mathematica?
- 30. Làm cách nào để tôi có thể triển khai kiểu ngoại lệ của riêng mình?
Tôi muốn nói rằng được xây dựng trong một vỏ. Không nên khó khăn để cuộn của riêng bạn. – squiguy