簡體   English   中英

無法在 macOS 上的 C execve() 調用中使用“/usr/bin/env”

[英]Can't use "/usr/bin/env" in C execve() call on macOS

找了一段時間后,我真的找不到任何相關結果,所以我自己問這個。 我有以下 C 代碼,它嘗試通過/usr/bin/env通過execve()執行nasm ,因此我不必對可執行文件的路徑進行硬編碼。

#include <unistd.h>
int main(int argc, char**argv) {
    char *cmds[10] = {"/usr/bin/env", "nasm", "--version", NULL};
    execve(cmds[0], cmds, NULL);
}

在 linux (Ubuntu 18/20) 上,它工作正常:

linux $ gcc test.c && ./a.out
NASM version 2.13.02
linux $

但是,在 macOS(至少是 Catalina)上,我得到以下信息:

macos $ gcc test.c && ./a.out                                                                                                                            
env: nasm: No such file or directory
macos $

我不確定有什么區別。 我確實安裝了 NASM,我可以在我的終端上運行nasm --version就好了。 如果我將路徑/usr/local/bin/nasm硬編碼到execve()調用,它也能正常工作。 如果我嘗試在我的終端上手動運行以下命令,它似乎也有效:

macos $ /usr/bin/env nasm --version
NASM version 2.15.05 compiled on Aug 29 2020
macos $

我想使用/usr/bin/env的原因是nasm的默認安裝位置對於不同的操作系統是不同的,我不想只是硬編碼路徑。

問題是您使用execve

e后綴表示你傳遞一個環境給exec系統調用,但是你傳遞的環境是NULL 這意味着根本沒有環境

使用execv來使用與調用程序相同的環境。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM