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

unix环境高级编程笔记(6)—— 文件和目录(3)

2014-12-03 15:30 274 查看
这一节主要是讲目录的操作,涉及创建目录、删除目录、读取目录等

[b]1 mkdir 和 rmdir[/b]

用mkdir创建目录,用rmdir删除目录。

#include <sys/stat.h>
int mkdir(const char *pathname,mode_t mode);
成功返回0,出错返回-1.


此函数创建一个新的空目录,. 和.. 自动创建,文件访问权限mode由进程的文件模式创建屏蔽字进行修改。(必须指定一个执行权限位)

#include <unistd.h>
int rmdir(const char *pathname);
成功返回0,出错返回-1.


此函数删除一个空目录。如果函数使目录的链接计数为0,且没有进程打开此目录,则释放目录所占的空间。

[b]2 读目录[/b]

对目录具有访问权限的任何用户都可以读目录,但是,只有内核才可以写目录。

#include <dirent.h>
DIR *opendir(const char *pathname);
成功返回指针,出错返回NULL。
struct dirent *readdir(DIR *dp);
成功返回指针,出错返回NULL。
void rewinddir(DIR *dp);
int closedir(DIR *dp);
成功返回0,出错返回NULL。
long telldir(DIR *dp);
返回值:与dp关联的目录中的当前位置。
void seekdir(DIR *dp,long loc);


dirent 结构在<dirent.h>中定义。

struct dirrent {

    ino_t d_ino;

    char d_name[NAME_MAX + 1];

};

DIR 是一个内部结构,上述六个函数用这个内部结构保存当前正在被读的目录的有关信息。

由opendir返回的指向DIR结构的指针供另外5个函数使用,opendir执行初始化操作,使第一个readdir读目录的第一个目录项。且各个目录项的顺序一般不按字母顺序排列。

[b] 3 chdir,fchdir 和 getcwd 函数[/b]

每个进程都有一个当前工作目录,此目录是搜索所有相对路径名的起点(不以斜杠开始的路径名为相对路径)。

#include <unistd.h>
int chdir (const char *pathname);
int fchdir (int filedes);
成功返回0.失败返回-1.


这两个函数中,分别用pathname和filedes来指定新的当前工作目录。

注意:当前工作目录是进程的一个属性,所以更改当前工作目录只影响调用进程本身

#include <unistd.h>
char *getcwd (char *buf,size_t size);
若成功返回buf,失败返回NULL。


该缓冲区必须有足够的长度容纳绝对路径地址加上一个null终止字符。

实例:

#include <stdio.h>
#include <unistd.h>
int main()
{
char path[1024];
if(getcwd(path,1024) == NULL)
printf("getcwd error\n");
else
printf("before: %s\n",path);
if(chdir("/home") != 0)
printf("chdir error\n");
if(getcwd(path,1024) == NULL)
printf("getcwd error\n");
else
printf("after: %s\n",path);
return 0;

}


编译运行

root@debian:/program# pwd
/program
root@debian:/program# ./4-9
before: /program
after: /home
root@debian:/program# pwd
/program
root@debian:/program# ^C
root@debian:/program#


从上面的结果可以看出,chdir只改变调用进程的当前工作目录,并不影响其他进程。getcwd 获取当前工作目录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: