Linux 系统标准 I/O

本文介绍了四个标准IO实验,涉及缓冲区原理、不同缓存类型、文件复制方法、时间处理及追加写入技巧,旨在帮助读者深化对标准IO在Linux系统中的应用理解。
摘要由CSDN通过智能技术生成

标准 IO 实验(一)

 【实验内容】

本实验通过一个简单的程序计算默认缓冲区的大小,理解标准 I/O 提供的三种类型的缓存。

【实验目的】

深入了解标准 IO 的三种类型,即全缓存,行缓存,不带缓存。

【实验平台】

PC 机、Ubuntu 操作系统,gcc 等工具

【实验提示】

全缓冲:当填满 I/O 缓存后才进行实际的 I/O 操作; 行缓冲:当在输入和输出中遇到新换行符(‘\n’)时,进行 I/O 操作; 不带缓冲:标准 I/O 库不对字符进行缓冲,例如 stderr;

【实验步骤】

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); Linux 系统实验手册 
 
 
2 
} 
 while(1);//强制执行,如果取消,程序结束时将会输出所有字符,看不到效果了。 
} 

标准 IO 实验(二)

【实验内容】

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

【实验目的】

深入了解标准 IO 文件读写的基本原理。 1.学习如何判断文件是否结束 2.熟练掌握标准 I/O 函数 【实验平台】

PC 机、Ubuntu 操作系统,gcc 等工具 

【实验提示】

1、判断文件结束有三种方式:

a) char p[1024]; 
 while (fgets(p,1024,src)!= NULL) 
 fputs(p,des1); 
b) int c; 
 while((c=fgetc(src))!=EOF) 
 fputc(c,des2); 
c) while((n=fread(s,1,20,src)) == 20) 
 { 
 // printf("----------%d\n",t++); 
 fwrite(s,1,n,des3); 
 } 
fwrite(s,1,n,des3); 

2、要拷贝一个文件,即要有源文件和目标文件,使用 fopen 分别打开两个文件,一个文件被读,一个 文件被写。完成文件的复制后须将这两个文件都关闭。

参考代码:

【 实 验 思 考 】

如 果 要 将 一 个 文 件 拷 贝 到 两 个 文 件 中 , 怎 么 办 ?

提 示 : 用 fs e e k ( ) 或 r e w i n d ( ) 定 位 ;

                                                        标 准 I O 实 验 ( 三 )

【 实 验 目 的 】

Linux 系统实验手册 4 通过本实验掌握标准 I/O 的使用

【实验内容】

编程读写一个文件 test.txt,每隔 1 秒向文件中写入一行数据,类似这样 1, 2007-7-30 15:16:42 2, 2007-7-30 15:16:43 该程序应该无限循环,直到按 Ctrl-C 中断程序。下次再启动程序写文件时可以追加到原文件之后,并 且序号能够接续上次的序号,比如: 1, 2007-7-30 15:16:42 2, 2007-7-30 15:16:43 3, 2007-7-30 15:19:02 4, 2007-7-30 15:19:03 5, 2007-7-30 15:19:04

【实验平台】

PC 机、ubuntu 操作系统,gcc 等工具

【实验提示】 

要追加写入文件,同时要读取该文件的内容以决定下一个序号是几,应该用什么模式打开文件?  首先判断一下打开的文件是否为新文件,如果是新文件,就从序号 1 开始写入;如果不是新文件,则 统计原来有多少行,比如有 n 行,然后从序号 n+1 开始写入。以后每写一行就把行号加 1。  获取当前的系统时间需要调用函数 time(),得到的结果是一个 time_t 类型,其实就是一个大整数, 其值表示从 UTC 时间 1970 年 1 月 1 日 00:00:00(称为 UNIX 的 Epoch 时间)到当前时刻的秒钟数。然 后调用 localtime()将 time_t 所表示的 UTC 时间转换为本地时间(我们是+8 区,比 UTC 多 8 个小时) 并转成 struct tm 类型,该类型的各数据成员分别表示年月日时分秒,请自己写出转换格式的代码, 不要使用 ctime()或 asctime()函数。具体用法请查阅 man page。time 和 localtime 函数需要头文件 time.h。  调用 sleep(n)可使程序睡眠 n 秒,该函数需要头文件 unistd.h。

                                                        标准 IO 实验(四) 

【实验目的】

通过本实验掌握标准 I/O 的使用

【实验内容】

Linux 系统实验手册 5 一个文件 test.txt,文件内容为: 1 2 4 5 编程读写这个文件,修改其内容,添加一行,将文件内容变成: 1 2 3 4 5

【实验平台】

PC 机、ubuntu 操作系统,gcc 等工具

【实验提示】 把正确的内容写入一个临时文件,把临时文件重命名即可;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式Dora

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值