文件操作3

一、getcwd函数和chdir函数


1.当前进程的工作目录

2.getcwd函数原型

/*

buf:工作目录保存到buf中

size:buf的大小

返回值:失败返回NULL

*/

char*getcwd(char*buf,size_tsize);

3.chdir函数

/*

path:修改的路径

返回值:成功为0,失败为-1

*/

char*chdir(constchar*path);

4.练习一个进程的目录,并打印到屏幕

int main(int argc,char * argv[])

{

char * ret;

char path[1024] = {‘\0’};

ret = getcwd(path,1024);

if(ret == NULL)

{

perror(“getcwd error”);

exit(-1);

}

write(STDOUT_FILENO,path,1024);

chdir(“/home/yjt”);

ret = getcwd(path,1024);

if(ret == NULL)

{

perror(“getcwd error”);

exit(-1);

}

write(STDOUT_FILENO,path,1024);

return 0;

}

二、目录操作函数


依赖文件:dirent.h

2-1:opendir函数、closedir函数

1.打开目录文件

2.函数原型

/*

参数:name—打开的目录文件

返回值:执行目录文件的结构体指针

*/

DIR*opendir(constchar*name);

3.关闭目录文件

4.函数原型

/*

参数:dirp—要关闭文件的目录

返回值:成功为0,失败为-1

*/

int closedir(DIR*dirp);

2-2:读取目录文件,readdir

1.读取目录里面的文件信息

2.函数原型

/*

参数:dp—要读取的目录文件

返回值:读取到最后一项返回NULL,errno不变,失败的话errno会变。

成功为文件描述文件的结构体

*/

structdirent*readdir(DIR*dp);

structdirent

{

ino_td_ino;//INode

off_td_off;

unsignedshortd_reclen;

unsignedchard_type;

chard_name[]//FILE_NAM

}

三、dup和dup2


1.dup用于

作用:复制个新的文件描述符号,并且和oldfd指向同一个文件

intdup(intoldfd);

2.dup2

作用:让newfd指向oledfd的文件

intdup2(intoldfd,intnewfd)

int dup2(int oldfd,int newfd);

1.实现ls

intmain(intargc,char*argv[])

{

DIR*dp;

structdirent*file=NULL;

dp=opendir(“/home/yjt”);

if(dp==NULL)

{

perror(“opendie error”);

exit(-1);

}

while( (file=readdir(dp)) !=NULL)

{

if(file->d_name[0] !=’.’)

printf(“%s\n”,file->d_name);

}

return0;

}