1
我想寫execl
功能的包裝,但該命令不運行(與execl
直接它的工作原理)寫作EXECL()函數的包裝,有怪異的結果
於是我加了一個vfprintf
用於調試目的。但是vfprintf僅打印/bin/ls
,所以我認爲它在中間的某處被截斷。
我的代碼有什麼問題?
int my_execl(const char *file, const char *format, ...)
{
int ret = 0;
va_list args;
va_start (args, format);
vfprintf (stdout, format, args);
ret = execl (file, format, args);
va_end (args);
return ret;
}
int main (int argc , char **argv)
{
my_execl ("/bin/ls", "/bin/ls", "-r", "-t", NULL);
return 0;
}
中有['exec'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html)家族沒有函數,它接受的格式規範和一個'va_list'參數。 –
'vprintf'只打印'「/ bin/ls」'是因爲這是格式字符串,字符串中沒有實際的格式或額外的參數。 –
如果你真的需要編寫一個包裝器(你爲什麼要這樣做?),你必須手動構造參數列表並調用例如['execv'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html)。 –