Q
的C調用程序殼
2
A
回答
3
考慮這個測試代碼:
#include <stdio.h>
int main(int argc, char** argv) {
printf("ARGV[0] = %s\n", argv[0]);
}
如果我編譯它爲「test_argv」,並運行它,我得到什麼我鍵入運行程序:
% ./test_argv
ARGV[0] = ./test_argv
% test_argv
ARGV[0] = test_argv
% /tmp/test_argv
ARGV[0] = /tmp/test_argv
所以你要例如,針對正則表達式或子字符串測試字符串。
3
Shell如何執行程序? (下面很簡單說明)
shell()
{
loader("Path name/Filename of your program", argv[0], argv[1]...for your program);
}
這意味着所有的這些參數來加載器,由所述外殼製成,然後將 裝載機被調用,並且默認的argv [0]是由相同的路徑名/程序的文件名。
現在,當你說./a.out ..它意味着你的程序的絕對路徑名是在當前目錄./a.out.(The文件爲a.out)
我們可以省略./ ?答案是肯定的,如果環境變量PATH有。作爲其組成部分之一說的第一個組成部分。
通過在shell提示符下鍵入echo $ PATH可以看到PATH變量的內容(A:可以看到分隔的路徑列表)。
如果。是不是你可以通過在shell提示符下輸入export PATH =。:$ PATH來添加。
之後,您可以通過鍵入a.out從當前目錄運行您的代碼,而不必鍵入./a.out。
現在我認爲這很清楚,爲什麼argv [0]成爲您正在執行的文件的名稱?
現在我們可以爲argv [0]命名,而不是文件名?
答案是肯定的,然後你需要自己調用加載程序,那就是寫一小段像shell一樣的代碼。
您可以瀏覽互聯網/手冊頁execve功能家族,這實際上是這裏所說的加載程序。
相關問題
- 1. 實施殼「*」到C程序
- 2. 註冊C#應用程序作爲外殼程序
- 3. 調用C程序
- 4. 多殼應用程序?
- 5. 凸殼用C
- 6. 從C調用C++程序的問題#
- 7. 如何中斷(CTRL + C)中的emacs殼(M-X殼)中的程序
- 8. swi_prolog調用C++程序
- 9. 從.c調用MASM32程序
- 10. 調試C#應用程序
- 11. 從c程序調用token_get_all
- 12. 從C程序調用Java
- 13. 調試c#應用程序
- 14. 從C#應用程序調用C++ DLL
- 15. 用C使外殼
- 16. 模擬調度程序的C程序
- 17. 在C程序中調用調試器
- 18. 調試C程序
- 19. C調查程序
- 20. 從C程序中調用C++函數
- 21. 從C#/ WPF調用C++程序
- 22. C++程序調用C#接口
- 23. 從C#程序調用一個C DLL
- 24. Windows外殼程序和Citrix
- 25. SIGALRM等待子殼程序?
- 26. Qt程序與殼牌
- 27. 在Android的adb外殼程序本地程序中使用stl
- 28. 從外殼調試RoR的教程
- 29. 捕獲殼調試過程的輸出
- 30. EFI應用程序外殼腳本
然後使用'argv [1]'。有什麼問題? – Linuxios
我認爲在他們的情況下,他們不使用./,因爲他們將shell設置爲使用當前目錄作爲使用可執行文件時的相對路徑。這與僅輸入ls而不是/ usr/bin/ls的想法類似。在你的情況下,./指定你想在當前目錄中使用lower。 「」意味着* nix系統中的當前工作目錄。 – squiguy
什麼是K&R書? – uday