對於不同的進程,我該如何調用execlp()
以及可變數量的參數?如何調用可變數量參數的函數?
3
A
回答
9
如果你不知道你有多少參數需要在你編寫代碼的時候,你想用execvp(),而不是execlp():
char **args = malloc((argcount + 1) * sizeof(char *));
args[0] = prog_name;
args[1] = arg1;
...
args[argcount] = NULL;
execvp(args[0], args);
1
這只是回答標題問題
從Wikipedia 涵蓋新舊風格
#include <stdio.h>
#include <stdarg.h>
void printargs(int arg1, ...) /* print all int type args, finishing with -1 */
{
va_list ap;
int i;
va_start(ap, arg1);
for (i = arg1; i != -1; i = va_arg(ap, int))
printf("%d ", i);
va_end(ap);
putchar('\n');
}
int main(void)
{
printargs(5, 2, 14, 84, 97, 15, 24, 48, -1);
printargs(84, 51, -1);
printargs(-1);
printargs(1, -1);
return 0;
}
0
execlp()
可以與可變數量或變元被稱爲因此,只需撥打電話:
int ret;
ret = execlp("ls", "ls", "-l", (char *)0);
ret = execlp("echo", "echo", "hello", "world", (char *)0);
ret = execlp("man", "man", "execlp", (char *)0);
ret = execlp("grep", "grep", "-l", "pattern", "file1", "file2", (char *)0);
0
Execlp已經作爲可變數量的參數。你想要做什麼? 你也許可以一variadic macro:
#define myfind(...) execlp("find", "find", __VA_ARGS__)
這是一個相當無用的例子,但不知道更多的正是你想做的事,這就是我能想出
+0
這不是(標準)C99可變宏的語法。爲什麼繼續使用它? – 2010-01-21 08:12:49
+0
對不起,這是什麼語法呢? – shodanex 2010-01-21 08:16:16
相關問題
- 1. 如何在帶參數的函數中調用變量函數?
- 2. 如何從可變參數參數調用函數?
- 3. 如何使用單參數調用javascript函數可以通過變量參數調用函數?
- 4. 在Javascript中使用可變參數函數調用可變參數函數?
- 5. PHP調用具有可變數量參數的函數
- 6. 具有可變數量參數的函數調用
- 7. Javascript:轉發函數調用的參數數量可變
- 8. 帶有(未知)可變數量參數的調用函數?
- 9. 如何將函數變量調用到其他函數參數或參數中?
- 10. 如何使用可變數量的參數來替換函數?
- 11. 如何用可變數量的參數定義函數?
- 12. 如何用JavaScript中的可變參數數量覆蓋函數?
- 13. 使用可變參數類型參數的變量函數
- 14. PHP函數 - 調用自與相同(可變數量)參數
- 15. JRuby:如何調用沒有可選參數的Java可變參數函數
- 16. 的回調函數變量參數
- 17. 使用未知數量的參數調用可變參數
- 18. 如何在函數中使用函數調用者變量,如參數?
- 19. C++ 11:使用向量元素調用可變參數函數
- 20. 具有變量數量參數的Ruby調用函數
- 21. 如何將可變數量的參數傳遞給sprintf()函數?
- 22. 如何可變數量的參數傳遞給函數在PHP
- 23. 如何傳遞可變數量的參數以及回調函數?
- 24. 如何調用Python函數在PHP傳遞變量參數
- 25. Javascript:如何通過變量和傳遞參數調用函數
- 26. 如何讓知道調用的函數(而不是函數參數)調用函數的變量
- 27. 如何在可變參數函數中的所有參數上調用std :: forward?
- 28. 如何創建一個接受可變數量變量參數的函數?
- 29. 可變參數函數和常量
- 30. 如何將所有可變數量的參數傳遞給接受可變數量參數的另一個函數?接受參數的個數的變量#
爲什麼不直接使用'execvp'如果參數的數量在運行時會有所不同? – 2010-01-21 08:07:59