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

一、目录的打开和关闭

 

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支持多种的目录类型,如AppleHFSISO9600VFAYNFS,如果用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         成功删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值