I? 撰寫一個函式,如果輸入 -link,則必須在末尾回傳鏈接指向的檔案的名稱,如果不撰寫該命令,則不回傳它。問題是我不知道如何使用函式“readlink()”獲取檔案的名稱,因為它回傳檔案的大小而不是名稱,并在“https://pubs.opengroup.org/”中搜索onlinepubs/000095399/functions/readlink.html”我無法理解從檔案中獲取名稱的方法。
printf("%s %ld (%lu) %s %s ", time, info.st_nlink, info.st_ino, pw->pw_name, gr->gr_name); //prints a bunch of information about the file
printf( (S_ISDIR(info.st_mode)) ? "d" : "-");
printf( (info.st_mode & S_IRUSR) ? "r" : "-");
printf( (info.st_mode & S_IWUSR) ? "w" : "-");
printf( (info.st_mode & S_IXUSR) ? "x" : "-");
printf( (info.st_mode & S_IRGRP) ? "r" : "-");
printf( (info.st_mode & S_IWGRP) ? "w" : "-");
printf( (info.st_mode & S_IXGRP) ? "x" : "-");
printf( (info.st_mode & S_IROTH) ? "r" : "-");
printf( (info.st_mode & S_IWOTH) ? "w" : "-");
printf( (info.st_mode & S_IXOTH) ? "x" : "-");
if(!opts.link){ //If the -link command wasnt written
printf(" %ld %s\n", info.st_size, tokens[2]);
} else{
//Here I need to print the same as in the last line but adding the name of the file the link points to like this:
printf(" %ld %s -> %s\n", info.st_size, tokens[2], name);
}
uj5u.com熱心網友回復:
從POSIXreadlink參考:
該
readlink()函式應將參考的符號鏈接的內容放置path在緩沖區中buf...
您在第一個引數中傳遞鏈接名稱(path在參考中命名)。然后該函式將展開鏈接并將其復制到第二個引數(名為buf)中。用于的陣列的大小buf作為第三個引數 ( bufsize)傳遞。
該函式回傳它寫入的位元組陣列的長度buf(除非偶然,它不是字串)。或-1出錯。
你可以這樣稱呼它:
char buffer[1024];
ssize_t link_string_length;
if ((link_string_length = readlink(your_filename_for_stat, buffer, sizeof buffer)) == -1)
{
perror("readlink");
}
else
{
// Make sure that the buffer is terminated as a string
buffer[link_string_length] = '\0';
printf("%s -> %s\n", your_filename_for_stat, buffer);
}
uj5u.com熱心網友回復:
使用readlink(). 回傳值是名稱的長度,但其中一個引數是名稱被復制到的緩沖區:
ssize_t readlink(const char *restrict path, char *restrict buf,
size_t bufsize);
請注意,名稱不是以空字符結尾的:
該
readlink()函式應將路徑參考的符號鏈接的內容放置在大小為bufsize的緩沖區buf中。如果符號鏈接中的位元組數小于bufsize,則 buf 剩余部分的內容未指定。如果buf引數不足以包含鏈接內容,則第一個bufsize位元組應放在buf 中。
您應該確保緩沖區中有足夠的空間用于回傳值和一個空位元組。
我對readlink()不添加空位元組來創建字串的設計的看法是 NSFW。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/322574.html
