exec เวอร์ชันต่างๆที่ใช้ใน C และ C ++ มีอะไรบ้าง?


92

นี่คือเวอร์ชันทั้งหมดของ exec ที่สามารถใช้ได้ใน C (และ C ++)

execl
execle
execlp
execv
execve
execvp

อะไรคือความแตกต่างระหว่างพวกเขา? คุณรู้ได้อย่างไรว่าควรใช้อันไหน?

คำตอบ:


184

ความแตกต่างคือการรวมกันของ:

  1. L vs V : คุณต้องการส่งผ่านพารามิเตอร์ไปยังโปรแกรม exec'ed หรือไม่

    • L : แต่ละพารามิเตอร์ในการเรียก (รายการอาร์กิวเมนต์ตัวแปร): execl(), execle(), execlp()และexeclpe()
    • V : เป็นอาร์เรย์ของ char * execv(), execve(), execvp()และexecvpe()

    รูปแบบอาร์เรย์มีประโยชน์เมื่อจำนวนพารามิเตอร์ที่จะถูกส่งไปยังกระบวนการ exec'ed เป็นตัวแปรเนื่องจากไม่ทราบล่วงหน้าดังนั้นคุณจึงไม่สามารถใส่พารามิเตอร์จำนวนคงที่ในการเรียกใช้ฟังก์ชันได้

  2. E : เวอร์ชันที่มี 'e' ในตอนท้ายช่วยให้คุณสามารถส่งอาร์เรย์ของ char * ซึ่งเป็นชุดของสตริงที่เพิ่มเข้าไปในสภาพแวดล้อมของกระบวนการสร้างก่อนที่โปรแกรมที่ดำเนินการจะเปิดตัว อีกวิธีหนึ่งในการส่งผ่านพารามิเตอร์จริงๆ

  3. : เวอร์ชันที่มี 'p' อยู่ในนั้นใช้ตัวแปรสภาพแวดล้อมPATH เพื่อค้นหาไฟล์ปฏิบัติการที่ตั้งชื่อเพื่อเรียกใช้งาน เวอร์ชันที่ไม่มี 'p' ต้องการพา ธ ไฟล์แบบสัมบูรณ์หรือแบบสัมพัทธ์เพื่อนำหน้าชื่อไฟล์ของไฟล์ปฏิบัติการหากไม่ได้อยู่ในไดเร็กทอรีการทำงานปัจจุบัน


2
คำอธิบายที่ดีที่สุดที่ฉันเคยเห็นมา มันเกือบจะสั้นพอ ๆ กับเอกสาร / อ้างอิงอย่างเป็นทางการ แต่มันแสดงออกให้ข้อมูลและเข้าใจได้มากกว่าพันเท่า ขอขอบคุณ.
Akito

5

Opengroup เป็นหนึ่งในการอ้างอิงทั่วไปที่ดีที่สุดสำหรับฟังก์ชัน core c / c ++

เอกสารสำหรับ exec * อยู่ที่นี่: http://pubs.opengroup.org/onlinepubs/009695399/functions/environ.html


2
นี่ไม่ได้ตอบคำถามจริงๆและเป็นลิงค์เท่านั้น
Jean-François Fabre

ก่อนมาถึงที่นี่ฉันอ่านเอกสารในเว็บไซต์ แต่ก็ไม่ได้ช่วยอะไรมากมาย คำอธิบายสั้นมากแม้ว่าควรจะอธิบายอย่างละเอียด นอกจากนี้ยังยากที่จะหาคำอธิบายที่ถูกต้องสำหรับสิ่งที่คุณกำลังมองหาหากคุณกำลังค้นหาตั้งแต่เริ่มต้น
Akito

-4

มันเป็นส่วนขยาย Posix ของไลบรารีรันไทม์ C หากเอกสาร Posix อย่างเป็นทางการไม่เพียงพอฉันขอแนะนำหนังสือ - Samuel P. Harbison, Guy L. Steele, 2002 "CA Reference" หน้า # 416 - ครอบคลุมคำถามนั้น


2
แม้ว่าลิงก์นี้อาจตอบคำถามได้ แต่ควรรวมส่วนสำคัญของคำตอบไว้ที่นี่และระบุลิงก์เพื่อการอ้างอิง คำตอบแบบลิงก์เท่านั้นอาจไม่ถูกต้องหากหน้าที่เชื่อมโยงเปลี่ยนไป - จากรีวิว
31piy

ลิงก์ไปยัง amazon และ posxis มาตรฐานเพื่อเป็นประโยชน์สำหรับผู้อ่าน โอเคฉันลบลิงก์ตามที่คุณถามแม้ว่าฉันจะไม่เห็นด้วยว่าจะดีกว่า เตือนการไม่ให้คะแนนของคุณถ้าตอนนี้อ่านได้มากขึ้น
bruziuz

1
ฉันไม่ได้ลงคะแนนสำหรับคำตอบของคุณ ฉันเพิ่งตรวจสอบคำตอบของคุณซึ่งฉันคิดว่ามีคุณภาพต่ำ ฉันไม่ได้ตั้งใจจะลบลิงก์ ประเด็นนี้คือการรวมข้อความที่ตัดตอนมาจากลิงก์ซึ่งจะช่วยให้ผู้อ่านในอนาคตเข้าใจคำตอบได้ทันที เพียงแค่โพสต์ลิงก์ในคำตอบไม่ได้ช่วยทุกคน
31piy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.