目录操作
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来查询,所以只需要记住什么函数能实现什么功能就好