php seekdir,《Linux程序设计》第三章(标准IO库、格式化输入输出、文件和目录的维护、扫描目录)...

标准IO库在启动程序时,有三个文件流是自动打开的,分别是stdin,stdout,stderr。

1. fopen函数:用于文件和终端的输入和输出。函数原型如下:

#include

FILE *fopen(const char* filename,const char *mode);

mode 有几种形式。需要注意的是,filename和mode都必须是字符串,用双引号。

2.fread函数从文件流stream中读取到ptr指向的缓冲区,size指定每个数据记录的长度,计数器nitems给出要传输的记录个数。

函数原型是#include size_t fread(void *ptr,size_t size,size_t nitems, FILE *stream);

3.fwrite从指定的数据缓冲区中取出数据记录,并把它们写到输出流中。函数原型是

#include size_t fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream);

4.fclose函数关闭指定的流文件。函数原型是:#include int fclose(FILE* stream)

5.fflush函数将流文件中未写出的数据立刻写出。#include int fflush(FILE *stream);

6.fgetc、getc、getchar函数

7.fputc、putc、putchar函数

8.fgets和gets函数

格式化输入输出1.printf、fprintf和sprintf函数,它们能够控制格式输出

2.scanf、fscanf和sscanf函数,它们控制格式输入

3.其他流函数stdin、stdout、stderr函数

4.为了表明错误,许多stdio库函数会返回一个超出范围的值,比如空指针或者EOF常数。错误由外部变量errno指出。

#include extern int errno;

也可以通过检查流的状态来确定是否发生了错误,或者到达了文件尾。

#include

int ferror(FILE *stream);//测试一个文件流的错误表示

int feof(FILE *stream);//测试一个文件流的尾标识

void clearerr(FILE* stream);//清除由stream指向的文件流的文件尾标识和错误标识

5.文件流和文件描述符

每个文件流和底层文件描述符相关联。#include

int fileno(FILE *stream)

FILE *fdopen(int fildes,const char *mode)

文件和目录的维护1.chmod系统调用可以改变文件或者目录的访问权限。函数原型如下:

#include

int chmod(const char *path,mode_t mode);mode可以或操作。

2.chown系统调用,能够改变文件的属主

#include

#include

int chown(const char* path, uid_t owner, gid_t group);

3.unlink、link、symlink的系统调用:

4.mkdir和rmdir系统调用:用来建立和删除目录

#include

#include

int mkdir(const char* path,mode_t mode)//建立目录

#include

int rmdir(const char *path)//删除目录

5.chdir系统调用和getcwd函数

#include int chdir(const char* path);//浏览目录

#include char *getcwd(char *buf,size_t size);//确定自己的当前目录

扫描目录1.opendir函数打开一个目录并创建一个目录流

#include

#include

DIR *opendir(const char *name);//如果大概的文件过多,opendir可能会失败

2.readdir函数:返回一个指针,该指针值相等结构里保存着目录流dirp中下一个目录项的有关资料。

#include

#include

struct dirent *readdir(DIR *dirp);

3.telldir函数返回值记录着一个目录流的当前位置

#include

#include

long int telldir(DIR *dirp);

4.seekdir函数设置目录流dirp的目录项指针

#include

#include

void seekdir(DIR* drip,long int loc);

5.closedir函数关闭一个目录流并释放与之有关的资源

#include

#include

int closedir(DIR *dirp);

打印目录的实验:

#include

#include

#include

#include

#include

#include

void printdir(char *dir,int depth)//打印目录

{

DIR *dp;

struct dirent *entry;

struct stat statbuf;

if((dp=opendir(dir))==NULL){

fprintf(stderr,"cannot open directory:%s\n",dir);//如果没有打开目录,返回;

return;

}

chdir(dir);//浏览目录

while((entry=readdir(dp))!=NULL){/*目录项不为空,readdir返回一个dirent结构。该结构包含i节点和文件名*/

lstat(entry->d_name,&statbuf);

if(S_ISDIR(statbuf.st_mode)){//判断是个目录

if(strcmp(".",entry->d_name)==0||strcmp("..",entry->d_name)==0){continue;}

printf("%*s%s/\n",depth,"",entry->d_name);

printdir(entry->d_name,depth+4);

}

else{printf("%*s%s\n",depth,"",entry->d_name);}

}

chdir("..");

closedir(dp);

}

int main()

{

printf("Directory scan of /home:\n");

printdir("/home",0);

printf("done.\n");

exit (0);

}

将main函数改为以下的样子能够打印目录:int main(int argc,char* argv[])

{

char *topdir=".";

if(argc>=2){topdir=argv[1];}

printf("Directory scan of %s\n",topdir);

printdir(topdir,0);

printf("done.\n");

exit (0);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值