ฉันกำลังมองหาวิธีดำเนินการ Linux ที่สามารถเรียกใช้งานได้จาก Linux Executable แยกต่างหากที่คอมไพล์จาก C หรือ C++ อย่างไรก็ตาม ฉันได้ดูโพสต์ Stack Overflow จำนวนมากซึ่งผู้ใช้ทั้งหมดขอให้ใช้system()ฟังก์ชันหรือตัวห่อหุ้มของฟังก์ชันระบบ และฉันไม่ต้องการโปรแกรมที่ต้องอาศัยเชลล์ เพราะมันอาจแตกสลายได้ง่ายหากถูกถ่ายโอน ไปยังระบบปฏิบัติการอื่นที่มีเชลล์ต่างกัน

ในโพสต์ฉันจะรันโปรแกรมภายนอกภายใน C ใน Linux ด้วยอาร์กิวเมนต์ได้อย่างไร คำตอบที่สองระบุว่าexecve()เป็น wrapper สำหรับsystem()ฟังก์ชัน และสิ่งนี้ทำให้ฉันระวังฟังก์ชันอื่นๆ ในexec()ครอบครัว

ฉันได้ดูบทความต่อไปนี้ด้วย:

ความช่วยเหลือทั้งหมดได้รับการชื่นชม!

ตอบ

execve()ไม่ใช่เสื้อคลุมสำหรับsystem(); มันเป็นเสื้อคลุมสำหรับexecvesyscall เอง

execve() แทนที่กระบวนการปัจจุบัน ดังนั้นคุณอาจต้องfork()ดำเนินการexecve()ในกระบวนการลูก ดังนั้นจึงเลียนแบบพฤติกรรมของsystem().