Linux có một /proc
thư mục và hệ thống tập tin, mà theo như tôi có thể nói, không phải là một phần của POSIX. Trong mỗi /proc/$PID
thư mục con, là một liên kết tượng trưng cwd
, trỏ đến thư mục làm việc thực tế của quá trình của bộ điều khiển này ( cwd
liên kết luôn được cập nhật).
Liên kết tượng trưng này thuận tiện cho một số trường hợp sử dụng, như làm việc với các shell riêng biệt và trao đổi các tệp giữa hai shell (chính thức, các thư mục làm việc của chúng).
Có một cách đơn giản để có được một cái gì đó tương tự, chỉ sử dụng tính năng POSIX?
Thêm câu hỏi
Sau một nhận xét, chính xác hơn: nó không nhất thiết phải là một liên kết và một biến môi trường $<PID>_CWD
, cũng sẽ tốt như vậy, mặc dù lúc đầu thở dài, tôi không tin có một giải pháp như vậy tồn tại. Nó chỉ cần dễ tham khảo (ví dụ: liên kết tượng trưng hoặc biến môi trường) và luôn được cập nhật mỗi khi quy trình khác chuyển đổi thư mục làm việc của nó.
Giải pháp không nhất thiết phải là POSIX và khía cạnh quan trọng nhất là tính di động, nhưng POSIX chắc chắn là một sự đảm bảo.
pwdx
lệnh, vì vậy bạn có thể chỉ cần tạo một bí danh hoặc hàm được gọi pwdx
trên Linux, bao bọc xung quanh readlink
nếu bạn đang tìm kiếm thứ gì đó di động.
pwdx
lệnh đi kèm procps
để có thể là câu trả lời của bạn.
pwdx
. Nhưng FreeBSD thì không.
getcwd(3)
được sử dụng để làm việc bằng cách gọi stat(".")
và readdir("..")
, tìm một số inode phù hợp và lặp lại quá trình lên trên cho đến khi nó chạm vào thư mục gốc. Chúc may mắn làm điều đó trong bối cảnh của một quá trình khác. (Tôi cho rằng người ta có thể sử dụng ptrace
để thực hiện cuộc gọi đến getcwd
...)