我目前在操作系统类中。我们的一个项目涉及创建一个简单的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()'。 –