นี่คือเวอร์ชันทั้งหมดของ exec ที่สามารถใช้ได้ใน C (และ C ++)
execl
execle
execlp
execv
execve
execvp
อะไรคือความแตกต่างระหว่างพวกเขา? คุณรู้ได้อย่างไรว่าควรใช้อันไหน?
นี่คือเวอร์ชันทั้งหมดของ exec ที่สามารถใช้ได้ใน C (และ C ++)
execl
execle
execlp
execv
execve
execvp
อะไรคือความแตกต่างระหว่างพวกเขา? คุณรู้ได้อย่างไรว่าควรใช้อันไหน?
คำตอบ:
ความแตกต่างคือการรวมกันของ:
L vs V : คุณต้องการส่งผ่านพารามิเตอร์ไปยังโปรแกรม exec'ed หรือไม่
execl()
, execle()
, execlp()
และexeclpe()
execv()
, execve()
, execvp()
และexecvpe()
รูปแบบอาร์เรย์มีประโยชน์เมื่อจำนวนพารามิเตอร์ที่จะถูกส่งไปยังกระบวนการ exec'ed เป็นตัวแปรเนื่องจากไม่ทราบล่วงหน้าดังนั้นคุณจึงไม่สามารถใส่พารามิเตอร์จำนวนคงที่ในการเรียกใช้ฟังก์ชันได้
E : เวอร์ชันที่มี 'e' ในตอนท้ายช่วยให้คุณสามารถส่งอาร์เรย์ของ char * ซึ่งเป็นชุดของสตริงที่เพิ่มเข้าไปในสภาพแวดล้อมของกระบวนการสร้างก่อนที่โปรแกรมที่ดำเนินการจะเปิดตัว อีกวิธีหนึ่งในการส่งผ่านพารามิเตอร์จริงๆ
ป : เวอร์ชันที่มี 'p' อยู่ในนั้นใช้ตัวแปรสภาพแวดล้อมPATH
เพื่อค้นหาไฟล์ปฏิบัติการที่ตั้งชื่อเพื่อเรียกใช้งาน เวอร์ชันที่ไม่มี 'p' ต้องการพา ธ ไฟล์แบบสัมบูรณ์หรือแบบสัมพัทธ์เพื่อนำหน้าชื่อไฟล์ของไฟล์ปฏิบัติการหากไม่ได้อยู่ในไดเร็กทอรีการทำงานปัจจุบัน
Opengroup เป็นหนึ่งในการอ้างอิงทั่วไปที่ดีที่สุดสำหรับฟังก์ชัน core c / c ++
เอกสารสำหรับ exec * อยู่ที่นี่: http://pubs.opengroup.org/onlinepubs/009695399/functions/environ.html
มันเป็นส่วนขยาย Posix ของไลบรารีรันไทม์ C หากเอกสาร Posix อย่างเป็นทางการไม่เพียงพอฉันขอแนะนำหนังสือ - Samuel P. Harbison, Guy L. Steele, 2002 "CA Reference" หน้า # 416 - ครอบคลุมคำถามนั้น