Tôi đang viết một shell đơn giản như một khóa học hệ điều hành, tôi cần tìm trong PATH để tìm người dùng chương trình đã gõ, khi tôi tìm được đúng thư mục, tôi malloc một phần bộ nhớ vừa đủ để giữ tên thư mục cộng với tên chương trình, và tôi chuyển nó làm đối số đầu tiên cho execv().Điều gì xảy ra với bộ nhớ được cấp phát động khi gọi hàm execv()?
Tôi có thể đã phân bổ tĩnh 100 ký tự hoặc hơn, nhưng có giới hạn khiến tôi cảm thấy không thoải mái. Vì vậy, khi execv() thực hiện, là đống dọn dẹp hoặc là mảnh bộ nhớ bị mất?
Nó có thể không có nhiều bộ nhớ nhưng tôi chỉ tò mò.
Nếu bạn đã cấp phát một bộ đệm tĩnh để giữ đường dẫn, nó phải có độ dài tối thiểu mà đường dẫn tuyệt đối của Linux có thể là. Tìm kiếm trên google cho biết đây là '4096' (từ'/usr/src/linux-2.4.20-8/include/linux/limits.h', '#define PATH_MAX 4096/* # ký tự trong tên đường dẫn bao gồm nul */'). Vì vậy, bạn nên bao gồm 'limits.h' và làm cho bộ đệm của bạn' PATH_MAX' ký tự. – Praetorian