C語言telldir()函數:取得目錄流的讀取位置
頭文件:
1
|
#include <dirent.h> |
定義函數:
1
|
off_t telldir(DIR *dir); |
函數說明:telldir()返回參數dir 目錄流目前的讀取位置. 此返回值代表距離目錄文件開頭的偏移量返回值返回下個讀取位置, 有錯誤發生時返回-1.
錯誤代碼:EBADF 參數dir 為無效的目錄流。
范例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include <sys/types.h> #include <dirent.h> #include <unistd.h> main() { DIR *dir; struct dirent *ptr; int offset; dir = opendir( "/etc/rc.d" ); while ((ptr = readdir(dir)) != NULL) { offset = telldir (dir); printf ( "d_name : %s offset :%d\n" , ptr->d_name, offset); } closedir(dir); } |
執行結果:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
d_name : . offset :12 d_name : .. offset :24 d_name : init.d offset 40 d_name : rc0.d offset :56 d_name : rc1.d offset :72 d_name : rc2.d offset :88 d_name : rc3.d offset :104 d_name : rc4.d offset :120 d_name : rc5.d offset :136 d_name : rc6.d offset :152 d_name : rc offset :164 d_name : rc.local offset :180 d_name : rc.sysinit offset :4096 |
C語言seekdir()函數:設置下回讀取目錄的位置
頭文件:
1
|
#include <dirent.h> |
定義函數:
1
|
void seekdir(DIR * dir, off_t offset); |
函數說明:seekdir()用來設置參數dir 目錄流目前的讀取位置, 在調用readdir()時便從此新位置開始讀取. 參數offset 代表距離目錄文件開頭的偏移量。
錯誤代碼:EBADF 參數dir 為無效的目錄流。
范例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#include <sys/types.h> #include <dirent.h> #include <unistd.h> main() { DIR * dir; struct dirent * ptr; int offset, offset_5, i = 0; dir = opendir( "/etc/rc.d" ); while ((ptr = readdir(dir)) != NULL) { offset = telldir(dir); if (++i == 5) offset_5 = offset; printf ( "d_name : %s offset :%d \n" , ptr->d_name, offset); } seekdir(dir offset_5); printf ( "Readdir again!\n" ); while ((ptr = readdir(dir)) != NULL) { offset = telldir(dir); printf ( "d_name : %s offset :%d\n" , ptr->d_name, offset); } closedir(dir); } |
執行:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
d_name : . offset :12 d_name : .. offset :24 d_name : init.d offset 40 d_name : rc0.d offset :56 d_name : rc1.d offset :72 d_name : rc2.d offset :88 d_name : rc3.d offset :104 d_name : rc4.d offset :120 d_name : rc5.d offset :136 d_name : rc6.d offset :152 d_name : rc offset :164 d_name : rc.local offset :180 d_name : rc.sysinit offset :4096 readdir again! d_name : rc2.d offset :88 d_name : rc3.d offset :104 d_name : rc4.d offset :120 d_name : rc5.d offset :136 d_name : rc6.d offset :152 d_name : rc offset :164 d_name : rc.local offset :180 d_name : rc.sysinit offset :4096 |