文件目录操作函数

目录操作

1,打开目标目录
opendir();
2.读取目录
readdir();
3.关闭目录
closedir();

操作目录函数

opendir函数

函数原型

DIR *opendir(const char *name);

功能:
打开一个目录获得一个目录流指针;
参数:
name:目录名;
返回值
成功返回目录流指针;
失败返回NULL;

readdir函数

函数原型

struct dirent *readdir(DIR *dirp);

功能:
从目录流中读取文件信息并将保存信息的结构体,然后地址返回
参数:
dirp:目录流指针
返回值:
包含文件信息的结构体;
出错或者读到目录流末尾返回NULL;

closedir函数

函数原型

 int closedir(DIR *dirp);

功能:关闭之前已经打开的目录流对象;
参数:opendir的返回结果中目录流对象;
返回值:成功 0;
失败 -1;
示例代码

int main(int argc, char *argv[])
{
    DIR * dir = opendir("./");
    if(NULL == dir)
    {
        fprintf(stderr,"opendir errpr\n");
        return 1;
    }
    while(1)
    {
        struct dirent * info = readdir(dir);
        if(NULL == info)
        {
            break;
        }
        switch(info->d_type)
        {
            case DT_DIR:
                printf("目录文件 ");
                break;
            case DT_REG:
                printf("普通文件 ");
                break;
            case DT_UNKNOWN:
                printf("其他文件 ");
                break;
            default:
                printf("未知文件 ");
        }
        printf("%s\n",info->d_name);
    }
    closedir(dir);
    return 0;
}

getcwd函数

(pwd)
函数原型

char *getcwd(char *buf, size_t size);

功能:
获得当前的工作路径;
参数:
buf:保存工作路径空间的首地址;
size:保存路径空间的长度;
返回值:
成功返回包含路径空间的字符串首地址;
失败返回NULL;
示例代码

int main(int argc, char *argv[])
{
    char buf[256]={0};
    getcwd(buf,sizeof(buf));
    printf("current path is %s\n",buf);
    chdir("../");
    getcwd(buf,sizeof(buf));
    printf("change path is %s\n",buf);
    return 0;
}

mkdir

函数原型

int mkdir(const char *pathname, mode_t mode);

功能:
创建一个目录
参数:
pathname:路径
mode:
mode在程序中要与umask 0002相减
返回值:
成功返回0
失败返回-1
示例代码


int main(int argc, char *argv[])
{
    int ret = mkdir("aaa",0777);
    if(-1 == ret)
    {
        fprintf(stderr,"mkdir error\n");
        return 1;
    }

    return 0;
}

rmdir

函数原型

int rmdir(const char *pathname);

功能:
删除一个空目录文件
参数:
pathname:目录文件的名字
返回值:
成功返回0
失败返回-1

文件属性获取

stat

int  stat(const  char  *path, struct stat *buf);

功能:
获得文件的属性
参数:
path: 文件的路径
buf: 属性存放空间的首地址
返回值:
成功返回0
失败返回-1
示例代码

int main(int argc, char *argv[])
{
    struct stat st;
    char filename[]="./01ls.c";
    int ret= stat(filename,&st); 
    if(-1 == ret)
    {
        fprintf(stderr,"stat error\n");
        return 1;
    }

    printf("ino:%lu mode:%d link:%lu uid:%u gid:%u size:%lu time:%lu %s\n",st.st_ino,st.st_mode,st.st_nlink
           ,st.st_uid,st.st_gid,st.st_size,st.st_mtime,filename);

    return 0;
}

系统时间的获取

time

函数原型

time_t time(time_t *t);
time_t tm;
time(&tm)
tm = time(NULL);

功能:
获得1970年到现在的秒数
参数:
t:存放秒数的空间首地址
返回值:
成功返回1970年到现在的秒数
失败返回-1
示例代码

int main(int argc, char *argv[])
{
    time_t tm;
    time(&tm);
    printf("%ld\n",tm);
    return 0;
}

localtime

函数原型

struct tm *localtime(const time_t *timep);

功能:
将一个秒数转化成日历时间
参数:
timep:保存秒数空间的地址
返回值:
成功返回保存日历时间结构体的指针
失败返回NULL
示例代码

int main(int argc, char *argv[])
{
    time_t tm;
    time(&tm);

    struct tm  * t=  localtime(&tm);
    printf("%d-%d-%d %d:%d:%d\n",t->tm_year+1900 ,t->tm_mon+1,t->tm_mday,t->tm_hour
           ,t->tm_min,t->tm_sec);
    return 0;
}

ctime

函数原型

char *ctime(const time_t *timep);//date

功能:
将时间秒数转化成字符串
参数:
timep:保存时间空间的地址
返回值:
成功返回获得时间字符串的首地址
失败返回NULL
示例代码

int main(int argc, char *argv[])
{
    time_t tm;
    time(&tm);
    printf("%s\n",ctime(&tm));
    return 0;
}

getpwuid

函数原型

struct passwd *getpwuid(uid_t uid);

功能:
根据用户id到/etc/passwd文件下解析获得结构体信息
参数:
uid:用户id
返回值:
成功返回id对应用户的信息
失败返回NULL

getpwnam

函数原型

struct passwd *getpwnam(const char *name);

功能:
根据用户名到/etc/passwd文件下解析获得
结构体信息:

struct passwd
{
char pw_name; / username */
char pw_passwd; / user password /
uid_t pw_uid; /
user ID /
gid_t pw_gid; /
group ID */
char pw_gecos; / user information */
char pw_dir; / home directory */
char pw_shell; / shell program */
};

链接文件

symlink

快捷方式:命令行:ln -s 123 softlink

函数原型

int  symlink(const  char  *oldpath, const char *newpath);

功能:
创建一个链接向oldpath文件的新符号链接文件
参数:
oldpath:被链接向的文件的路径
newpath:新符号链接文件
返回值:
成功返回0
失败返回-1

remove

快捷方式 :rm -fr

函数原型

int remove(const char *pathname);

功能:
删除一个文件
参数:
pathname:删除文件的路径
返回值:
成功返回0
失败返回-1

rename

快捷方式:mv

函数原型

int  rename(const  char  *oldpath,  const char *newpath);

功能:
将一个老的路径名改为新的路径
参数:
oldpath:老路径名
newpath:新路径名
返回值:
成功返回0
失败返回-1

link

快捷方式:ln 1 2

函数原型

int  link(const char *oldpath, const char *newpath);

功能:
创建一个硬链接文件
参数:
oldpath:要链接向的文件
newpath:创建的新硬链接文件
返回值:
成功返回0
失败返回-1

总结

函数可以都可以通过man来查询,所以只需要记住什么函数能实现什么功能就好

  • 25
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值