step4 . day1标准IO和文件IO

标准IO:ANSI C中定义的一系列用于对IO操作的函数,(只能访问普通文件)

知识点:流指针:文件的操作,标准IO通常通过一个FILE的结构体,称这个结构体为流,他的指针称为流指针(系统自动打开的流:标准输出stdout 标准输入stdin,标准出错stderr),全缓冲、行缓冲、无缓冲fflush

相关函数:fopen  fcloes  perror  strerror  fgetc/fputc  fgets/fputs  getchar/putchar   gets/puts   fread/fwrite   fseek(可以创建指定大小文件)  ftell    rewind  fscanf sscanf  fprintf  sprintf  ferror feof

time localtime ctime  sleep  

文件IO:  低级磁盘IO,无缓冲模式,遵循POSIX标准,可以访问其他种类文件

知识点:文件描述符,和流指针类似,是一个整数表示这个文件的描述

相关函数:open close  read  write  lseek 

目录操作相关函数:pendir  readdir closedir  chmod  fchmod  stat  fstat   getpwuid   getgrpid

这么多函数根本记不全的,放弃吧,一边编程一边看man手册,用着用着就记住了。。。。。

代码:四种模式的文件复制

1.字符复制


#include<stdio.h>

int main(int argc, const char *argv[])
{
if(argc<3){
printf("Usmsg: %s <src_file> <des_file>\n",argv[0]);
return -1;
}
FILE *fps,*fpd;
if((fps = fopen(argv[1],"r")) == NULL){
perror("src_file fopen");
return -1;
}
if((fpd = fopen(argv[2],"w+")) == NULL){
perror("des_file fopen");
return -1;
}

char ch;
while((ch = fgetc(fps)) != -1){
fputc(ch,fpd);
}

fclose(fps);
fclose(fpd);
return 0;
}

2. 行复制


#include <stdio.h>


#define N 32

int main(int argc, const char *argv[])
{
if(argc<3){
printf("Usrmsg:%s <file_name> <file_name>\n",argv[0]);
return -1;
}
FILE *fps,*fpd;
if((fps = fopen(argv[1],"r")) == NULL){
perror("src fopen");
return -1;
}
if((fpd = fopen(argv[2],"w")) == NULL){
perror("dec fopen");
return -1;
}
char buf[N];
while(fgets(buf,N,fps) != NULL){
fputs(buf,fpd);
}
fclose(fps);
fclose(fpd);


return 0;
}

3.按照对象复制


#include<stdio.h>

int main(int argc, const char *argv[])
{
if(argc<3){
printf("Usrmsg:%s <file_name> <file_name>\n",argv[0]);
return -1;
}

FILE *fps,*fpd;
if((fps = fopen(argv[1],"r")) == NULL){
perror("src fopen");
return -1;
}
if((fpd = fopen(argv[2],"w")) == NULL){
perror("des fopen");
return -1;
}

char buf[64];
int n;
while((n = fread(buf,1,64,fps)) > 0){
fwrite(buf,1,n,fpd);
}

fclose(fps);
fclose(fpd);

return 0;
}

4.文件IO复制


#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>


int main(int argc, const char *argv[])
{
if(argc<3){
printf("Usrmsg:%s <File_name> <File_name>\n",argv[0]);
}

int fds,fdd,n;
char buf[64];

if((fds = open(argv[1],O_RDONLY))== -1 ){
perror("opensrc");
return -1;
}
if((fdd = open(argv[2],O_WRONLY | O_CREAT | O_TRUNC,0666 ))== -1 ){
perror("opendes");
return -1;
}

while((n = read(fds,buf,64))>0){
write(fdd,buf,n);
}
close(fds);
close(fdd);

return 0;
}

 

posted @ 2019-08-03 08:47  灰机12321  阅读(227)  评论(0编辑  收藏  举报