標準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;
 }
 }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章