Sử dụng popen
nếu bạn muốn chạy lệnh trình bao và muốn quy trình cha mẹ có thể nói chuyện với trẻ. (Nó móc đầu vào hoặc đầu ra của đứa trẻ lên đến luồng bạn lấy lại.) Nếu không, hãy thích gia đình của các hàm (fork
) exec
. Các quá trình d thừa kế hầu hết các mô tả tập tin mở (bao gồm stdin, stdout và stderr), vì vậy bạn có thể móc đầu vào và đầu ra theo bất cứ thứ gì bạn thích ... cộng với ít tác động bảo mật hơn.
system
nói chung là tránh tốt nhất trừ khi bạn phải chạy lệnh shell. Nó sinh ra một shell để chạy lệnh và shell có thể phân tích cú pháp lệnh theo bất kỳ cách nào nó thích. Cụ thể, một số biến môi trường nhất định (như $IFS
và/hoặc $PATH
) có thể được sửa đổi theo cách sao cho phụ huynh thực thi các chương trình mà bạn không bao giờ dự định. Mặc dù popen
dường như làm điều tương tự, ít nhất nó cũng cung cấp chức năng làm cho nó đáng giá trong trường hợp chung.
'man popen' và' man system'? –
Bạn đã thử sử dụng popen() chưa? hoặc vấn đề của nó với bạn nhị phân? Bạn chỉnh sửa lần cuối là hơi bối rối – henryyao
Để sử dụng 'popen' thay vì' system' không giúp được vấn đề thực tế của bạn: quá trình bị kẹt. – Wolf