linux的目录操作:
改变目录、文件权限:chmod
获取、改变当前目录:getcwd 、chdir
创建、删除目录:mkdir、rmdir
获取目录信息:opendir、readdir、rewinddir、seekdir、telldir、closedir
删除文件: unlink、unlinkat
int chmod() //改变目录或文件的访问权限。相当于chmod。可以通过:man 2 chmod 查看。
例子:
#include <sys/stat.h> //chmod函数的头文件
#include <stdio.h>
int main(int argc,char* argv[]){
if(argc!=2){
printf("error args\n");
return -1;
}
int ret=chmod(argv[1],0777); //argv[1]给定的文件权限会被修改。最后的权限为:777与umask进行操作后的权限。
if(-1==ret){
perror("chmod");
}
return 0;
}
getcwd() //获取当前的路径,相当于:pwd
#include <unistd.h> //getcwd的头文件
#include <stdio.h>
int main()
{
char* p;
char p1[128]={0};
p=getcwd(NULL,0); //方式一。常用。
printf("p=%s\n",p);
getcwd(p1,sizeof(p1)); //方式二。
printf("p1=%s\n",p1);
printf("path=%s\n",getcwd(NULL,0)); //方式三。
return 0;
}
chdir //切换目录,相当于:cd
#include <unistd.h> //chdir的头文件
#include <stdio.h>
int main(int argc,char* argv[]){
if(argc !=2){
printf("error args\n");
return -1;
}
char* p;
p=getcwd(NULL,0);
printf("p=%s\n",p);
int ret=chdir(argv[1]);
if(-1==ret){
perror("chdir");
return -1;
}
printf("path=%s\n",getcwd(NULL,0));
return 0;
}
mkdir() //创建目录
#include <sys/stat.h> //这三个都是mkdir的头文件
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc,char* argv[]){
if(argc !=2){
printf("error args\n");
return -1;
}
int ret=mkdir(argv[1],0777);
if(-1==ret){
perror("mkdir");
return -1;
}
return 0;
}
rmdir() //删除目录
#include <sys/stat.h> //这三个都是rmdir的头文件
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc,char* argv[])
{
if(argc !=2)
{
printf("error args\n");
return -1;
}
int ret=rmdir(argv[1]);
if(-1==ret)
{
perror("rmdir");
return -1;
}
return 0;
}
unlink() //删除文件
#include <unistd.h> //unlink的头文件
int main(int argc,char* argv[]){
if(argc !=2){
printf("error args\n");
return -1;
}
int ret=unlink(argv[1]); //不能删除目录
if(-1==ret){
perror("unlink");
return -1;
}
return 0;
}
DIR * opendir(const char *name); //打开一个目录
struct dirent *readdir(DIR *dir); //读取目录的一项信息,并返回该项信息的结构体指针
void rewinddir(DIR *dir); //重新定位到目录文件的头部
void seekdir(DIR *dir,off_t offset); //用来设置目录流目前的读取位置
off_t telldir(DIR *dir); //返回目录流当前的读取位置
closedir() //关闭目录文件
struct dirent {
ino_t d_ino; //inode number(此目录进入点的inode)
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 文件:8
char d_name[256]; //filename(文件名)
};
#include <sys/types.h> //这两个是上面这些函数的头文件。
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char* argv[])
{
if(argc!=2){
printf("error args\n");
return -1;
}
DIR* dir=opendir(argv[1]); //打开目录
if(NULL==dir){
perror("opendir");
return -1;
}
struct dirent* d; //定义结构体指针
off_t l;
while((d=readdir(dir))!=NULL){
printf("%d %s\n",d->d_type,d->d_name);
if(!strcmp(d->d_name,"file")){ //如果找到了file,就把当前的位置记录下来。
l=telldir(dir);
}
}
seekdir(dir,l); //根据刚才的位置,找文件
d=readdir(dir);
printf("%d %s\n",d->d_type,d->d_name);
closedir(dir);
return 0;
}
怎么只改一个字母vim
touch file
在程序里面获取路径。
chdir //相当于cd
ls -i //可以看到inode