//所有功能函数需要传递路径参数的,绝对路径和相对路径都是可以的,函数会自动识别出是绝对路径和相对路径。“/”开始的是绝对路径,没有的是相对路径;相对路径函数会自动加上当前程序所运行的路径pwd,构成一个绝对路径
改变目录或文件的访问权限:
#include <sys/stat.h>
int chmod(const char* path, mode_t mode); //mode(8进制)形如:0777,path(路径)参数指定的文件被修改为具有mode参数给出的访问权限 ;成功返回0,失败返回-1。
|
test.c | |
#include<sys/stat.h>
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char** argv)
{
if(argc!=2)
{
printf("error args\n");
return -1;
}
int ret =chmod(argv[1],0777);
if(ret!=0)
{
perror("chmod");
return -1;
}
return 0;
}
|
获取、改变当前目录:
原型为:
#include <unistd.h> //头文件
char *getcwd(char *buf, size_t size); //获取当前目录,相当于pwd命令, 参数通常(NULL,0)
int chdir(const char *path); //修改当前目录为参数所指定的目录,即切换目录,相当于cd命令;成功返回 0,失败返回 -1。
其中:
getcwd()函数:将当前的工作目录绝对路径复制到参数buf所指的内存空间,参数size为buf的空间大小. 在调用此函数时,buf所指的内存空间要足够大,若工作目录绝对路径的字符串长度超过参数size大小,则回值NULL,errno的值则为ERANGE。倘若参数buf为NULL,getcwd()会依参数size的大小自动配置内存(使用malloc()),如果参数size也为0,则getcwd()会依工作目录绝对路径的字符串长度来决定所配置的内存大小,进程可以在使用完此字符串后自动利用free()来释放此空间。所以常用的形式:getcwd(NULL, 0);
|
|
|
注:如果 man 查函数查到的是命令,就加一个数字2,man 2 func
创建和删除目录:
原型为:
#include <sys/stat.h>
#include <sys/types.h>
int mkdir(const char *pathname, mode_t mode); //创建目录,mode是目录权限(最终要和umask相减);成功返回0,失败返回-1
#include <unistd.h>
int rmdir(const char *pathname); //删除目录;成功返回0,失败返回-1
|
|
|
获取目录信息:
原型为:
#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name); //打开一个目录,返回目录流,失败返回NULL; 路径可以传相对路径也可以传递绝对路径
struct dirent *readdir(DIR *dir); //读取目录的一项信息,并返回该项信息的结构体指针,执行完后dir自动偏移到下一个节点
void rewinddir(DIR *dir); //重新定位到目录文件的头部
void seekdir(DIR *dir,off_t offset); //用来设置目录流目前的读取位置,偏移不设置默认在开头
off_t telldir(DIR *dir); //返回目录流当前的读取位置
int closedir(DIR *dir); //关闭目录文件
|
struct dirent
{
ino_t d_ino; /* inode number(此目录进入点的inode) 也就是ls -ail 得到的第一个信息*/
off_t d_off; /* offset to the next dirent(目录开头到进入点的位移) */
unsigned short d_reclen; /* length of this record(目录名的长度) */
unsigned char d_type; /* type of file(所指的文件类型) 4位,一共16种*/
char d_name[256]; /* filename(文件名) */
};
(存储不是连续的,不然删除一个目录,文件,所有都要移动)
|
读取目录信息的步骤为:
用opendir函数打开目录;
使用readdir函数迭代读取目录的内容,如果已经读取到目录末尾,又想重新开始读,则可以使用rewinddir函数将文件指针重新定位到目录文件的起始位置;
用closedir函数关闭目录
|
opendir() 用来打开参数name指定的目录,并返回DIR*形态的目录流,和文件操作函数open()类似,接下来对目录的读取和搜索都要使用此返回值。函数失败则返回NULL;
readdir() 函数用来读取目录的信息,并返回一个结构体指针,该指针保存了目录的相关信息。有错误发生或者读取到目录文件尾则返回NULL;
|
|
// 4是目录文件,8是普通文件 |
printf(“%*s%s\n”,i, ” ”, ”hello”); 等价于 printf("%10s%s\n"," ","hello"); //test01.c #include<stdio.h>
int main()
{
printf("%*s%s\n",10," ","hello");
printf("%*s%s\n",10,"~","hello");
printf("%10s%s\n","~","hello");
printf("1234567890\n");
return 0;
}
|
2017/11/2 18:41:37
目录遍历:
|
//传入一个绝对路径或者相对路径,能够遍历该路径下所有文件并打印(深度遍历) |