Linux程式设计之三

int rewinddir(DIR *dir);
struct dirent {
long d_ino; /* inode number */
off_t d_off; /* offset to this dirent */
unsigned short d_reclen; /* length of this d_name */
char d_name [NAME_MAX+1]; /* file name (null-terminated) */
};
opendir开启一个目录操作DIR,closedir关闭之。
readdir则循序读取目录中的资讯,rewinddir则可重新读取目录资讯。

以下是个标准例。



--------------------------------------------------------------------------------

#include
#include
char ** dirGetInfo(const char *pathname)
{
char ** filenames;
DIR * dir;
struct dirent * ent;
int n = 0;

filenames = (char **)malloc(sizeof(char*));
filenames[0]=NULL;

dir = opendir(pathname);
if (!dir) return filenames;

while ((ent = readdir(dir))) {
filenames = (char**)realloc(filenames,sizeof(char*)*(n+1));
filenames[n] = strdup(ent->d_name);
n++;
}

closedir(dir);

filenames = (char **)realloc(filenames,sizeof(char*)*(n+1));
filenames[n] = NULL;

return filenames;
}


Linux程式设计-13.记忆体对映mmap
http://www.openchess.org/noitatsko/programming/ (2001-05-26 11:00:00)
Linux允许将档案对映到记忆体空间中。如此可以产生一个在档案资料及记忆体资料一对一的对映,例如字型档的存取。使用记忆体对映有许多好处:
高速档案存取。一般的I/O机制通常需要将资料先到缓区中。记忆体对映免去了中间这一层,加速档案存取速度。
可执行档可对映到记忆体空间中,使程式动态载入。Linux Dynamic Loading便是如此实作出来的。
新的记忆体可以透过利用/dev/zero来产生全零的档案。
新的记忆体可以用於执行目的,这对解译式编译器非常有用。
可把档案当成记忆体来用,直接使用指标来操作。
对映的记忆体可当成行程间共享记忆体,该记忆体内容存在档案中,因此与行程无关。

--------------------------------------------------------------------------------

页对齐「Page Alignment」
#include
size_t getpagesize(void);

系统记忆体通常被分割成页的单位。在Intel及SPARC上,每页为4096 Bytes(4K),在Alpha上则为8192 Bytes(8K)。getpagesize返回该系统的页大小。



--------------------------------------------------------------------------------

#include
#include
void * mmap(void *start, size_t length, int prot , int flags, int fd, off_t offset);
int munmap(void *start, size_t length);

mmap开启记忆体对映。

start指定记忆体位置,通常都是用NULL。offset指定档案要在那里开始对映,通常都是用0。

protections

PROT_READ
PROT_WRITE
PROT_EXEC
PROT_NONE

flags
MAP_FIXED
MAP_PRIVATE
MAP_SHARED

MAP_ANONYMOUS
MAP_DENYWRITE
MAP_GROWSDOWN
MAP_LOCKED

munmap关闭记忆体对映。



--------------------------------------------------------------------------------

int msync(const void *start, size_t length, int flags);

共9 页 首页 上一页 [1] [2] [3] [4] [5下一页 尾页>
上一篇: useradd
下一篇: linux上GD库的安装