提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、目录流指针
1.函数接口
1.opedir
DIR *opendir(const char *name)
功能:
打开目录获得目录流指针
参数:
name:目录的路径
返回值:
成功返回目录流指针
失败返回NULL
2.closedir
int closedir(DIR* drip);
功能
关闭一个目录流指针
3.readdir
struct dirent *readdir(DIR *dirp);
功能:
从目录流指针种读取下一个目录流信息
参数:
drip目录流指针
返回值:
成功返回目录流信息
失败或者读到末尾返回Null
struct dirent {
ino_t d_ino; /* inode number 通过该节点可知道位于磁盘的存储位置*/
off_t d_off; /* offset to the next dirent 下一个目录的偏移量*/
unsigned short d_reclen; /* length of this record */
unsigned char d_type; /* type of file; not supported
by all file system types 文件类型 */
char d_name[256]; /* filename 文件名*/
};
4.getcwd
char *getcwd(char *buf, size_t size);
功能:
获得当前工作路径下的绝对路径
参数:
buf:存放路径字符串空间的首地址
size:最多存放字符串的个数
返回值:
成功返回字符串的首地址
失败返回NULL
5.chdir
int chdir(const char *path);
功能:
改变当前的工作路径
path:
路径字符串的首地址
返回值
成功:返回0
失败:返回-1
6.mkdir
int mkdir(const char *pathname, mode_t mode);
功能:
创建一个目录
参数:
pathname 创建目录名称
mode 权限
返回值:
成功返回0
失败返回-1
r:读取该目录下的文件
w:在目录下不能创建文件
x:能否进去这个目录文件
umask = 2
7.rmdir
int rmdir(const char *pathname);
功能:删除目录
7.remove
int remove(const char *pathname);
功能:删除普通文件
二、关于目录相关实现的功能
1.ls
代码如下(示例):
#include "head.h"
//遍历当前路径下文件
int main(int argc, const char *argv[])
{
//打开目录
DIR * dp = opendir(".");
if(NULL == dp)
{
perror("opendir error");
return -1;
}
//定义读目录结构体
struct dirent * pp =NULL;
while(1)
{
//每次读取一个文件名
pp = readdir(dp);
if(NULL == pp)
{
break;
}
//如果是目录文件则跳过
if( pp->d_name[0] == '.')
{
continue;
}
printf("%s\n",pp->d_name);
}
closedir(dp);
return 0;
}
2.cd
#include "head.h"
int main(int argc, const char *argv[])
{
char buf[256] = {0};
char *p = NULL;
char word[256] = {0};
char *p1 = NULL;
while(1)
{
p = getcwd(buf,256);
printf("linux@ubuntu:~%s",p);
gets(word);
if( 0 == strcmp(word,"#quit"))
{
break;
}
strtok(word," ");
p1 = strtok(NULL," ");
chdir(p1);
}
return 0;
}
3.ls递归版
#include "head.h"
//递归函数
void dir_cur(const char * dir_name)
{
DIR * dp = opendir(dir_name);
struct dirent * pp =NULL;
struct stat buf;
char tempbuf[4096] = {0};
int ret = 0;
if(NULL == dp)
{
perror("opendir error");
return ;
}
while(1)
{
//遍历目录
pp = readdir(dp);
if(NULL == pp)
{
break;
}
//如果是当前路径或者上一级路径则跳过
if( pp->d_name[0] == '.')
{
continue;
}
//pp_d_name 为当前文件夹的路劲,用函数调用的时候需要拼接路劲
sprintf(tempbuf,"%s/%s",dir_name,pp->d_name);
printf("%s\n",pp->d_name);
ret = lstat(tempbuf,&buf);
if(-1 == ret)
{
perror("stat error");
return ;
}
//如果是路径循环调用该函数
if( S_ISDIR(buf.st_mode))
{
dir_cur(tempbuf);
}
}
closedir(dp);
return ;
}
int main(int argc, const char *argv[])
{
if( argc != 2)
{
printf("input error\n");
return -1;
}
dir_cur(argv[1]);
return 0;
}
2.目录递归遍历
三、链接io
1.概念
链接文件类似于windows下的快捷方式
1.软链接
通过文件名来链接
ln -s 链接向的文件 链接文件名
rm删除之后,不能用,但是创建之后可以用
链接存在为蓝色
链接不存在为红色
2.硬链接
通过i_node节点进行链接
ln 链接向的文件 链接文件名
2.函数接口
man 2 link
1.link
int link(const char *oldpath, const char *newpath);
功能
创建一个硬链接功能
参数:
oldpath:已存在的文件
newpath:链接文件
返回值
成功返回0
失败返回-1
2.symlink
int symlink(const char *oldpath, const char *newpath)
功能:创建一个软连接
参数:
oldpath:已存在的文件
newpath:链接文件
返回值
成功返回0
失败返回-1
man 3 readlink
3.ssize_t readlink(const char *restrict path, char *restrict buf,
size_t bufsize);
功能:读取软连接文件中存放的内容
参数: restrict
path软连接的路径
buf 存放数据空间的首地址
bufsize:最多读取字符个数
返回值:
成功返回字节数
失败返回-1
4.unlink
int unlink(const char *pathname);
功能:
让pathname对应的硬链接个数减一
注意:如果为0 则删除链接文件
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。