您的位置:首页 > 编程语言

UNIX环境编程--目录和文件

2010-03-28 17:22 357 查看
一、目录的打开和关闭

1.
名称:
opendir
目标:
打开一个目录。
头文件:
#include <sys/types.h>
#include < dirent.h>
函数原形:
DIR *opendir(const char *name)
参数:
name 目录名
返回值:
NULL 遇到错误
    
DIR * 打开成功
opendir用于打开一个目录,其功能和open相似。只不过open用于打开一个文件,而opendir用于打开一个目录。如果opendir可以成功打开一个目录,它就返回一个指向目录的指针,我们可以通过opendir的联机帮助知道这些内容。
首先在命令提示符后面键入[root@LINUX root]#man –k opendir来查找和opendir相关的联机帮助。我们可以得到以下内容:
opendir (3) -open a directory
这正是我们想要的。
然后我们可以键入[root@LINUX root]#man 3 opendir 来查看opendir[3]的联机帮助。
在帮助文档中我们可以看到这样一段话:
The opendir() function opens a directory stream correspondig to the directory name,and returns a pointer to the directory stream. The stream is positioned at the first entry in the directory.
The opendir() function rerurns a poin to the directory stream or NULL if an error occurred.
这些正是我们要找的信息. 除了这些信息我们还可以从帮助中获取诸如函数头文件,函数功能,函数原形,返回值,出错处理,相关函数等信息。大家试着用同样的方法来学习这些相关函数,达到举一返三的目的。

2.
名称:
closedir
目标:
关闭一个目录.
头文件:
#include <sys/types.h>
#include < dirent.h>
函数原形:
int closedir(DIR *dir)
参数:
dir 指向目录的指针
返回值:
-1 遇到错误
    
0 打开成功,返回指向目录的指针。
二、目录的读取
3
名称:
readdir
目标:
读取目录内容。
头文件:
#include <unistd.h>
#include <lixux/dirent.h>
#include < linux/unistd.h>
函数原形:
int readdir(unsigned int fd ,struct dirent *dirp,unsigned int count)
参数:
fd 文件描述符
dirp 用于存放读入数据的数组
count
返回值:
-1 遇到错误
    
0 打开成功
同样readdir的功能也和read相似,用于读取目录中内容。其实用open,read,close等函数也可以对目录目录操作的,但不是一个好的办法,因为Linux支持多种的目录类型,如Apple,HFS,ISO9600,VFAY,NFS,如果用read来读,需要了解这些不同类型目录各自的结构细节。
利用这些函数我们可以编写不加参数的ls 命令,下面是代码。
/*2_1.c*/

#include < dirent.h>
#include <stdio.h>
#include <sys/types.h>

void show_dir(char dirname[]);

main(int ac,char *av[])
{
if(ac==1)
show_dir(“.”); / *读当前目录*/
else
while(--ac)
{
printf(“%s:/n”,*++av);
show_dir(*av); /*读指定目录*/
}
}

void show_dir(char dirname[])
{
DIR *dir_ptr; /*定义目录类型的指针*/
struct dirent *direntp; /*定义用于读目录的缓冲区*/

if((dir_ptr=opendir(dirname))==NULL)
printf(“Can’t open!”);
else
{
while((direntp=readdir(dir_ptr))!=NULL)
printf(“%s/n”,direntp->d_name);
closedir(dir_ptr);
}
}

三、目录的创建和删除
4.
名称:
mkdir
目标:
创建目录
头文件:
#include < sys/stat.h>
#include <sys/types.h>
函数原形:
int result=mkdir(char *pathname,mode_t mode)
参数:
pathname 新建目录名
mode 权限位的掩码
返回值:
-1 遇到错误
    
0 成功创建
/*2_2.c*/

#include <unistd.h>
#include <sys/types.h>

main(int argc,char *argv[])
{
int result;
if(argc!=2)
printf(“please input a direction.”);
if((result=mkdir(argv[1]))==-1)
perror(“error”);
}
5.
名称:
rmdir
目标:
删除一个目录,此目录必须为空
头文件:
#include <unistd.h>
函数原形:
int result=rmdir(const char *path);
参数:
path 目录名
返回值:
-1 遇到错误
    
0 成功删除
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: