先整理程序
文件拷贝
1.fgetc/fputc
1 #include<stdio.h>2 int main(void)3 {4 FILE *fsrc = NULL;5 FILE *fdst = NULL;6 char ch = 0;7 fsrc = fopen("src.txt","r");8 if(NULL == fsrc)9 {10 perror("fail to fopen");11 return -1;12 }13 fdst = fopen("dst.txt","w");14 if(NULL == fdst)15 {16 perror("fail to fopen");17 return -1;18 }19 while(1)20 {21 ch = fgetc(fsrc); //一个一个拷贝过去 fgetc / fputc 22 if(EOF == ch)23 {24 break;25 }26 fputc(ch,fdst);27 }28 fclose(fsrc);29 fclose(fdst);30 31 return 0;32 }
2.fgets/fputs
1 #include<stdio.h>2 3 int main(void)4 {5 FILE *a = NULL;6 FILE *b = NULL;7 char c[4096]={0};8 char *d=NULL;9 a = fopen("src.txt","r");10 if(NULL == a)11 {12 perror("fail to fopen");13 return -1;14 }15 b = fopen("dst.txt","w");16 if(NULL == b)17 {18 perror("fail to fopen");19 return -1;20 }21 while(1)22 {23 d = fgets(c,sizeof(c),a); //一行一行的拷贝 fgets /fputs 24 if(NULL == d)25 {26 break;27 }28 fputs(c,b);29 }30 31 fclose(a);fclose(b);32 33 34 return 0;35 }
~
3.fread / fwrite
1 #include<stdio.h>2 3 int main(void)4 {5 size_t d =0;6 FILE *a=NULL;7 FILE *b=NULL;8 char c[1500000] = {0};9 a = fopen("src.jpg","r");10 if(NULL == a)11 {12 perror("fail to fopen");13 return -1;14 }15 b = fopen("dst.jpg","w");16 if(NULL == b)17 {18 perror("fail to fopen");19 return -1;20 }21 //两种写法 22 /* fread(c,sizeof(c),1,a); //返回值不同 第一种 23 // 要么返回 0 要么返回1 即成功或者失败24 */25 while(1)26 {27 d = fread(c,1,sizeof(c),a); //有多大返回多大28 if(0 == d)29 {30 break;31 }32 fwrite(c,1,d,b);33 }34 fclose(a);fclose(b);35 36 return 0;37 }
4. read /write
1 #include "head.h" 2 /*3 int main(void)4 { 5 ssize_t nret = 0;6 int b =0;7 int a =0;8 char c[200000]={0};9 a = open("a.jpg",O_RDONLY);10 if(-1==a)11 {12 perror("fail to open");13 return -1; 14 }15 b=open("b.jpg",O_WRONLY | O_CREAT | O_TRUNC,0664);16 if(-1==b)17 {18 perror("fail to open");19 return -1; 20 }21 while(1)22 {23 nret = read(a,c,sizeof(c));24 if(0 == nret)25 {26 break;27 }28 }29 write(b,c,sizeof(c));30 close(a);close(b);31 return 0;32 }33 */34 int main(int argc,const char *argv[])35 {36 ssize_t nret = 0; 37 int b =0;38 int a =0;39 char c[4096]={0};40 if(argc !=3)41 { 42 fprintf(stderr,"Usage:./a.out afilename bname\n");43 return -1;44 }45 a = open(argv[1],O_RDONLY);46 if(-1==a)47 {48 perror("fail to open");49 return -1;50 }51 b=open(argv[2],O_WRONLY | O_CREAT | O_TRUNC,0664);52 if(-1==b)53 {54 perror("fail to open");55 return -1;56 }57 while(1)58 {59 nret = read(a,c,sizeof(c));60 if(nret<=0)61 {62 break;63 }64 write(b,c,nret);65 }66 close(a);67 close(b);68 return 0;69 }
目录遍历
1.递归遍历
1 #include "head.h" 2 //递归遍历:3 int ListDir(const char*pdirname)4 {5 DIR *dp =NULL;6 struct dirent *pp =NULL;7 char c[4096]={0};8 dp = opendir(pdirname);9 if(NULL==dp)10 {11 perror("fail to open");12 return -1;13 }14 while(1)15 {16 pp=readdir(dp);17 if(NULL==pp)18 {19 break;20 }21 if('.'==pp->d_name[0]) //隐藏文件 以点开头的文件叫做隐藏文件22 {23 continue; //跳过循环24 }25 sprintf(c,"%s/%s",pdirname,pp->d_name); //拼接 26 printf("%s\n",c);27 if(pp->d_type == DT_DIR)28 {29 ListDir(c);30 }31 }32 closedir(dp);33 return 0;34 }35 int main(int argc,const char *argv[])36 {37 if(argc!=2)38 {39 fprintf(stderr,"Usage:./a.out dirname\n");40 return -1;41 }42 ListDir(argv[1]);43 return 0;44 }
2.单层目录遍历
1 #include "head.h"2 3 int main(void)4 {5 DIR *dp = NULL;6 struct dirent *pp = NULL;7 8 dp = opendir("dir1"); 9 if (NULL == dp)10 {11 perror("fail to opendir");12 return -1;13 }14 15 while (1)16 {17 pp = readdir(dp);18 if (NULL == pp)19 {20 break;21 }22 23 if ('.' == *pp->d_name)24 {25 continue;26 }27 28 printf("%s/%s\n", "dir", pp->d_name);29 }30 31 closedir(dp);32 33 return 0;34 }35
主函数 传参
文件IO:
1. lseek
off_t lseek(int fd, off_t offset, int whence);
功能:
重新设定文件描述符的偏移量
参数:
fd:文件描述符
offset:偏移量
whence:
SEEK_SET 文件开头
SEEK_CUR 文件当前位置
SEEK_END 文件末尾
返回值:
成功返回当前偏移量
失败返回-1
目录IO:
1.mkdir
int mkdir(const char *pathname, mode_t mode);
功能:
创建目录文件
参数:
pathname:文件路径
mode:文件的权限
返回值:
成功返回0
失败返回-1
rwx rwx rwx
111 111 111
0777
r: 目录中是否能够查看文件
w: 目录中是否能够新建文件
x: 目录是否能够进入
2.rmdir
int rmdir(const char *pathname);
功能:
删除空目录文件
返回值:
成功返回0
失败返回-1
3.opendir
DIR *opendir(const char *name);
功能:
打开目录获得目录流指针
参数:
name:目录文件路径
返回值:
成功返回目录流指针
失败返回NULL
4.closedir
int closedir(DIR *dirp);
功能:
关闭目录流指针
5.readdir
struct dirent *readdir(DIR *dirp);
功能:
从目录流中读取下一个目录项的结构体信息
参数:
dirp:目录流指针
返回值:
成功返回包含目录项信息的空间首地址
失败返回NULL
读到文件末尾返回NULL
struct dirent {
ino_t d_ino; /* Inode number */
off_t d_off; /* Not an offset; see below */
unsigned short d_reclen; /* Length of this record */
unsigned char d_type; /* Type of file; not supported
by all filesystem types */
char d_name[256]; /* Null-terminated filename */
};
6.chdir
int chdir(const char *path);
功能:
切换当前代码的工作路径
7.getcwd
char *getcwd(char *buf, size_t size);
功能:
获得当前目录的绝对路径
8.access
int access(const char *pathname, int mode);
功能:
检测调用函数的程序对文件是否拥有指定权限
参数:
pathname:文件路径
mode:
R_OK 检测是否拥有读权限
W_OK 检测是否拥有写权限
X_OK 检测是否拥有执行权限
F_OK 检测文件是否存在
返回值:
有该权限返回0
出错返回-1
sprintf
功能:把格式化的数据写入某个字符串
int sprintf( char *buffer, const char *format, [ argument] … );
buffer:char型指针,指向欲写入的字符串地址。
format:char型指针,指向的内存里面存放了格式字符串。
[argument]…:可选参数,可以是任何类型的数据。
返回值:字符串长度(strlen)