Привет! Преподаватель хочет, чтобы я знал подробную работу readdir, иначе зачет ставить не хочет
Сам уже не могу никак догадаться.
Исходник:
http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libc/port/g...
53 #include «lint.h»
54 #include <dirent.h>
55 #include <limits.h>
56 #include <errno.h>
57 #include «libc.h»
58
59 #ifdef _LP64
60
61 dirent_t *
62 readdir(DIR *dirp)
63 {
64 dirent_t *dp; /* -> directory data */
65 int saveloc = 0;
66
67 if (dirp->dd_size != 0) {
68 dp = (dirent_t *)(uintptr_t)&dirp->dd_buf[dirp->dd_loc];
69 saveloc = dirp->dd_loc; /* save for possible EOF */
70 dirp->dd_loc += (int)dp->d_reclen;
71 }
72 if (dirp->dd_loc >= dirp->dd_size)
73 dirp->dd_loc = dirp->dd_size = 0;
74
75 if (dirp->dd_size == 0 && /* refill buffer */
76 (dirp->dd_size = getdents(dirp->dd_fd,
77 (dirent_t *)(uintptr_t)dirp->dd_buf, DIRBUF)) <= 0) {
78 if (dirp->dd_size == 0) /* This means EOF */
79 dirp->dd_loc = saveloc; /* so save for telldir */
80 return (NULL); /* error or EOF */
81 }
82
83 return ((dirent_t *)(uintptr_t)&dirp->dd_buf[dirp->dd_loc]);
84 }
Описание структуры dirent: http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/sys/...
42 typedef struct dirent {
43 ino_t d_ino; /* «inode number» of entry */
44 off_t d_off; /* offset of disk directory entry */
45 unsigned short d_reclen; /* length of this record */
46 char d_name[1]; /* name of file */
47 } dirent_t;
Описание потока каталога: http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/head/dirent.h
53 typedef struct {
54 int dd_fd; /* file descriptor */
55 int dd_loc; /* offset in block */
56 int dd_size; /* amount of valid data */
57 char *dd_buf; /* directory block */
58 } DIR; /* stream data from opendir() */
-------------------------------
Вопрос, вот идут файлы один за одним в буфере считываются, буфер фиксированного размера, что происходит, когда буфер заканчивается на середине файла, как решается проблема срыва буфера, и битой записи?
Желателен ответ и тут же аргументация(срока в коде) и по возможности объяснение.
Заранее благодарю!
Ответ на:
комментарий
от iov_vec_t
Ответ на:
комментарий
от icebald
Ответ на:
комментарий
от icebald
Ответ на:
комментарий
от rg-400
Ответ на:
комментарий
от icebald
Ответ на:
комментарий
от xydo
Ответ на:
комментарий
от icebald
Ответ на:
комментарий
от icebald
Ответ на:
комментарий
от Sorcerer
Ответ на:
комментарий
от icebald
Ответ на:
комментарий
от Sorcerer
Ответ на:
комментарий
от icebald
Ответ на:
комментарий
от Sorcerer
Ответ на:
комментарий
от icebald
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Ошибка сегментирования. Рекурсивный обход каталогов (2017)
- Форум Не работает велосипед pwd на сях (2015)
- Форум Рекурсивно получить содержимое директорий (очень нубский вопрос) (2013)
- Форум ошибка сегментирования (2010)
- Форум Segmentation fault core dumped (2022)
- Форум [основы][OBS][невнимательность]помогите отловить глупую ошибку в спеке (2009)
- Форум Ошибка при компиляции (2015)
- Форум (c/c++) configure проверка статической библиотеки (2010)
- Форум Фича ФС? (2005)
- Форум FUSE Development (2012)