所以,我有一個問題,我一直沒能解決。我正在寫一個C程序,通過管道執行一些OS功能。執行通過execvp(const char * file,char * const argv []);來完成。從ARGV到execvp
以我主要功能我想借此傳遞給除第一個字符陣列的程序(的argv)整行,並將其傳遞到grep。一切正常的時刻,但我不斷收到警告:
我的代碼看起來像下面。在第if(1 < argc)
我希望能夠與修改,以newPipeline
上相同的格式printenv,種類少的第一個帖子發送argv
。
int main(int argc, char** argv, char **envp){
const char* printenv[] = {"printenv", NULL, NULL};
const char* sort[] = {"sort", NULL, NULL};
const char* less[] = {"less", NULL, NULL};
if(1<argc){
argv[0] = "grep";
const char* grep = argv;
const char* const* commands[] = {printenv, sort, grep, less, NULL};
newPipeline((char* const**)commands, 0, STDIN_FILENO);
}
//FROM HERE ON IT WORKS
else{
const char* const* commands[] = {printenv, sort, less, NULL};
newPipeline((char* const**)commands, 0, STDIN_FILENO);
}
if(signal(SIGCHLD, SIG_IGN) == SIG_ERR){
perror("A problem with the children");
}
exit(0);
}
我知道指針類型是錯誤的。我應該爲grep
構建一個全新的陣列,還是應該像我現在要做的那樣,將指針轉換爲正確類型的指針。如果以後,哪個指針會是?
您應該將您的數組(argv)複製到另一個數組中以與 –
一起使用'argv'不是'const'。您可以隨意修改它(也可以使用'grep'),因此每次將其傳遞時都要複製一份。 –
你想要將argv的元素加入由空格分隔的單個字符串中,對嗎?那就是你在這種情況下丟失的東西 – someguy