unix环境高级编程笔记(6)—— 文件和目录(3)
2014-12-03 15:30
274 查看
这一节主要是讲目录的操作,涉及创建目录、删除目录、读取目录等
[b]1 mkdir 和 rmdir[/b]
用mkdir创建目录,用rmdir删除目录。
此函数创建一个新的空目录,. 和.. 自动创建,文件访问权限mode由进程的文件模式创建屏蔽字进行修改。(必须指定一个执行权限位)
此函数删除一个空目录。如果函数使目录的链接计数为0,且没有进程打开此目录,则释放目录所占的空间。
[b]2 读目录[/b]
对目录具有访问权限的任何用户都可以读目录,但是,只有内核才可以写目录。
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]
每个进程都有一个当前工作目录,此目录是搜索所有相对路径名的起点(不以斜杠开始的路径名为相对路径)。
这两个函数中,分别用pathname和filedes来指定新的当前工作目录。
注意:当前工作目录是进程的一个属性,所以更改当前工作目录只影响调用进程本身。
该缓冲区必须有足够的长度容纳绝对路径地址加上一个null终止字符。
实例:
编译运行
从上面的结果可以看出,chdir只改变调用进程的当前工作目录,并不影响其他进程。getcwd 获取当前工作目录。
[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 获取当前工作目录。
相关文章推荐
- unix环境高级编程笔记(4)—— 文件和目录(1)
- Unix环境高级编程笔记 :4、文件和目录
- unix环境高级编程笔记(5)—— 文件和目录(2)
- UNIX环境高级编程——文件和目录
- UNIX环境高级编程复习——文件和目录(3)
- [置顶] 文件和目录(一)--unix环境高级编程
- UNIX环境高级编程——文件和目录
- 高级UNIX环境编程4 文件和目录
- UNIX环境高级编程第二版中编译程序提示“apue.h:找不到这个文件或目录”错误
- UNIX环境编程学习笔记(12)——文件I/O之目录操作
- unix环境高级编程 chap4 文件与目录
- UNIX环境高级编程——文件和目录
- UNIX环境高级编程第三章文件I/O 读后笔记
- 文件和目录(一)--unix环境高级编程
- UNIX环境高级编程复习——文件和目录(1)
- UNIX环境高级编程复习——文件和目录(5)
- Unix环境高级编程笔记 :3、文件I/O
- 关于Unix/Linux之Inode之我见----------Unix环境高级编程--目录、文件
- 文件和目录 - UNIX环境高级编程-第4章
- UNIX环境高级编程学习——列出一个目录中的所有文件