标准I/O操作编程

一、

1.向缓冲区中输入字符

2.向缓冲区中写的字符数目超过缓冲区得大小时,才执行输出。

3.可以手工计算出缓冲区大小(341*3+1=1024)

参考代码:

#include<stdio.h>

int main(){

       int i=0;

       for(i=0;i<379;i++){

              if(i>=100)

                      fprintf(stdout,"%d",i);

              else if(i>=10)

                      fprintf(stdout,"0%d",i);

              else if(i>0)

                      fprintf(stdout,"00%d",i);

       }

       while(1);

}

 

二、

通过一个简单的copy程序,完成文件的复制程序,了解基本的标准I/O文件读写的基本步骤。

#include<unistd.h>
#include<fcntl.h>
#include<errno.h>
#include<string.h>

#define maxsize 5

int main(int argc,char *argv[]){
 FILE *fp1,*fp2;
 char ch[maxsize];
 if(argc!=3){
  printf("command error!/n");
  return -1;
 }
 if((fp1=fopen(argv[1],"r"))==NULL){
  fprintf(stderr,"fopen()1 failed:%s/n",strerror(errno));
  printf("file %s cannot open/n",argv[1]);
  return -1;
 }
 if((fp2=fopen(argv[2],"w"))==NULL){
  fprintf(stderr,"fopen()2 failed:%s/n",strerror(errno));
  printf("cannot creat file %s/n",argv[2]);
  return -1;
 }
 while(fgets(ch,maxsize,fp1)!=NULL)
  fputs(ch,fp2);
// fflush(fp1);
 fflush(fp2);
 while(1);
 fclose(fp1);
 fclose(fp2);
 return 0;
}

 

三、

编写一个文件test.txt,每隔1秒向文件写入一行数据,类似于时间的格式输出:

 

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<unistd.h>

#define max 40

int main(){
 FILE *fp;
 char ch[max];
        int line = 0;
 if((fp=fopen("test.txt","a+"))==NULL){
  printf("Open error!/n");
  return -1;
 }
 while(fgets(ch,max,fp)!=NULL)
  line++;
 while(1){
  struct tm *tm1;
  time_t tm2;
  time(&tm2);
  tm1 = localtime(&tm2);
  line++;
  fprintf(fp,"line:%d,time:%d-%d-%d-%d-%d-%d",line,tm1->tm_year+1900,tm1->tm_mon+1,tm1->tm_wday+24,tm1->tm_hour,tm1->tm_min,tm1->tm_sec);
  fflush(fp);
  printf("line:%d,time:%d-%d-%d-%d-%d-%d/n",line,tm1->tm_year+1900,tm1->tm_mon+1,tm1->tm_wday+24,tm1->tm_hour,tm1->tm_min,tm1->tm_sec);
  sleep(1);
 }
 fclose(fp);
 return 0;
}

 

四、读或写一个二进制数组,将一个浮点数组的2~5个元素写至一个文件上:

#include<stdio.h>
#include<string.h>
#include<errno.h>

int main(int argc,char **argv){
 FILE *fp;
 float data[10];
 int i;
 for(i=0;i<10;i++){
  data[i]=i*0.1;
 }
 if((fp=fopen("test_file_1","wb+"))==NULL){
  fprintf(stderr,"fopen file test_file_1 for binary write failed:%s/n",strerror(errno));
  return 0;
 }
 fprintf(stdout,"[DEBUG] sizeof(float)=%d/n",sizeof(float));
 if(fwrite(&data[2],sizeof(float),4,fp)!=4){
  fprintf(stderr,"Binary write data to file test_file_1 failed:%s/n",strerror(errno));
 return 0;
 }
 fclose(fp);
 return 0;
}

五、读或写一个结构体,将一个结构体写至一个文件上:

#include<stdio.h>
#include<string.h>
#include<errno.h>

#define Name 16

struct{
 short count;
 long total;
 char name[Name];
}item;
 
int main(int argc,char **argv){
 FILE *fp;
 if((fp=fopen("test_file","wb+"))==NULL){
  fprintf(stderr,"fopen file test_file for binary write failed:%s/n",strerror(errno));
 return 0;
 }
 memset(&item,0,sizeof(item));

 item.count = 9;
 item.total = 74;
 strncpy(item.name,"Richard Stallman",Name);
 if(fwrite(&item,sizeof(item),1,fp)!=1){
  fprintf(stderr,"Binary write data to file test_file failed:%s/n",strerror(errno));
 return 0;
 fclose(fp);
 return 0;
 }
 }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值