一、
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;
}
}