我目前在操作系統類中。我們的一個項目涉及創建一個簡單的shell。這涉及解析行並解析路徑。所以我需要考慮像〜這樣的事情。 ../etc ..現在我正試圖想出一個用於輕鬆解決「..」 - 父目錄的代碼。C中的Unix路徑分辨率
這是我的代碼到目前爲止。我的目標是找到..的一個事件,然後保存字符串的後半部分(如果有的話),然後剝離..以及到第二個「/」之前。因此,例如我們有: /1/2/3/../../4/5/6 我的目標是,在..的第一個位置保存/../4/5/6 和然後保存1/2並連接。 那麼就應該尋找下一個..和保存/ 4/5/6到下半年 和上半年應該保存/ 1
void expandParentDirectory(){
char firstHalf[ 255 ];
char secondHalf[ 255 ];
for(int i = 1; i < tokenSize; i++){
// checking token list for appearance of ".."
////// tests
size_t len = strlen(parsedArguments[i]);
printf("string length is: %lu \n", len);
for(int j = 0; j < strlen(parsedArguments[i]); ++j){
if(parsedArguments[ i ][ j ] == '.')
if(parsedArguments[ i ][ j + 1 ] == '.'){
if(parsedArguments[ i ][ j + 2 ] != '\0'){
strcpy(secondHalf, &parsedArguments[ i ] [ j + 2 ]);
}
// code to expand PWD and move up a directory
// if (j == 0) {}
for (int k = j - 2 ; k > 0 ; k--) {
if(parsedArguments[ i ][ k ] == '/'){
strncpy(firstHalf, parsedArguments[ i ], k);
//firstHalf[ k ] = '\0';
free (parsedArguments[ i ]);
parsedArguments[ i ] = strdup(strcat(firstHalf, secondHalf
}
}
));
}
}
}
}
上得到這個任何建議正常工作? 有關更好方法的任何建議? 謝謝!
歡迎來到Stack Overflow。請儘快閱讀[關於]頁面。你應該發佈可編譯的代碼;你已經發布的內容明顯無法編譯,因爲''));'在最內層的'for'循環之後。你的'strdup(strcat(')行似乎缺少這些字符,你可能最好在字符串中尋找'/../'('strstr()');這更簡單明確地尋找你想要的東西。目前,你會濫用'/ abc/def ../ ghi'這是一個完全合法的路徑,不需要進行路由。你還需要將這個抽象成一個傳遞給'parsedArguments [i]'的函數。 –
請注意,字符串永遠不會增長;你不需要使用'strdup()'。 –