Chinaunix首页 | 论坛 | 博客
  • 博客访问: 59960
  • 博文数量: 16
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 185
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 20:05
文章分类
文章存档

2008年(16)

我的朋友

分类: LINUX

2008-03-06 20:49:23

文件和目录
#include
int chmod(const char *path,mode_t mode);
int chown(const char *path,uid_t owner,gid_t group)
这两个函数的操作非常简单,特别是熟悉chmod和chown命令。
mode_t的值有:
S_IRUSR,S_IXUSR,S_IWUSR
S_IRGRP,S_IXGRP,S_IWGRP
S_IROTH,S_IXOTH,S_IWOTH
相信大家一看就知道这些个代表的含义吧。

#include
int unlink(const char *path)
int link(const char *path1,const char *path2)
int symlink(const char *path1, const char *path2)

unlink函数用来删除文件的目录项并减少它的链接数,成功返回0,失败返回-1,大家应该知道,linux下一个文件的链接数减少到零,并且没有进程打开它的时候,这个文件才会被删除。
link函数就是ln命令,symlink函数就是ln -s命令。

#include
int mkdir(const char *path,mode_t mode)
和mkdir命令一样,创建一个目录,mode参数和上面介绍的chmod的一样,注意下创建文件指定权限时于umask的关系。

有mkdir函数,则一定有rmdir函数啦
#include
int rmdir(const char *path)

#include
int chdir(const char *path)
char *getcwd(char *buf,size_t size)
cd命令和pwd命令的函数出来了,getcwd把获得的当前目录名字存放在buf中,但是如果目录长度超出了size的长度的时候就会返回NULL。


目录扫描:
用到的函数有:
opendir,closedir,readdir,telldir,seekdir
与目录操作有关的函数都在dirent.h头文件中声明。有个DIR指针和文件操作的FILE指针类似,目录的有关属性保存在dirent结构体中。
下面用一个历程来说明这些函数的操作。

#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
void print_dir(char *path,int spaces)
{
    DIR *dp;
    struct dirent *dir;
    struct stat state;
    if((dp=opendir(path))==NULL)
    {
        perror("open dir error");
        exit(1);
    }
    chdir(path);
    while((dir=readdir(dp))!=NULL)
    {
        lstat(dir->d_name,&state);
        if(S_ISDIR(state.st_mode))
        {
            if(!strcmp(dir->d_name,".")||!strcmp(dir->d_name,".."))
                continue;
            printf("%*s%s/\n",spaces,"",dir->d_name);
            print_dir(dir->d_name,spaces+4);
        }
        else printf("%*s%s\n",spaces,"",dir->d_name);
    }
    chdir("..");
    closedir(dp);
}
int main(int argc,char* argv[])
{
    char *path=".";
    if(argc>=2)
        path="argv[1]";
    print_dir(path,0);
    return 0;
}




这是个对目录进行扫描,列出所有项的小程序。
首先用opendir检查目录是否存在,然后用chdir进入该目录,接着读取一个目录,并判断是否是一个文件夹,接着递归调用,最后用closedir关闭目录流并释放相关的资源。
 
 
 
 
  

阅读(1035) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~