标准IO与文件IO的区别
标准IO和文件IO的区别:
1.标准IO是库函数,是对系统调用的封装
2.文件IO是系统调用,是Linux内核中的函数接口
3.标准IO是有缓存的
4.文件IO是没有缓存的
IO:
b
c
d
- 标准IO
l
s
p
文件IO:
1.操作步骤:
打开 -> 读/写 -> 关闭
2.打开文件:
open
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
功能:
打开文件并且获得文件描述符
参数:
pathname:要打开的文件名
flags:标志位
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 读写
O_APPEND 追加
O_ASYNC 异步IO
O_CREAT 文件不存在创建
O_TRUNC 文件存在截断(清0)
返回值:
成功返回文件描述符(很小的非负整数)
失败返回-1
新生成的文件描述符总是为尚未被使用的最小的非负整数
0: stdin
1: stdout
2: stderr
3.关闭文件:
close
int close(int fd);
功能:
将fd对应的文件描述符关闭
4.读写:
read/write
1.write
ssize_t write(int fd, const void *buf, size_t count);
功能:
向fd对应的文件中写入buf指向的count个字节
参数:
fd:文件描述符
buf:写入数据空间首地址
count:写入的字节数
返回值:
成功返回实际写入字节数
失败返回-1
2.read
ssize_t read(int fd, void *buf, size_t count);
功能:
从文件描述符fd对应的文件中读取count个字节存放到buf开始的空间中
参数:
fd:文件描述符
buf:存放数据空间的首地址
count:想要读取数据字节数
返回值:
成功返回实际读到的字节数
失败返回-1
读到文件末尾返回0
人口普查作业
某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。
这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。
输入格式:
输入在第一行给出正整数 N,取值在(0,105];随后 N 行,每行给出 1 个人的姓名(由不超过 5 个英文字母组成的字符串)、以及按 yyyy/mm/dd
(即年/月/日)格式给出的生日。题目保证最年长和最年轻的人没有并列。
输出格式:
在一行中顺序输出有效生日的个数、最年长人和最年轻人的姓名,其间以空格分隔。
如下
1 #include<stdio.h>
2 #include<string.h>
3
4 int main(void)
5 {
6 int w=0;
7 int n,cnt = 0;//cnt 符合条件的个数
8 scanf("%d",&n);
9 int year,mouth,day;
10 char name[10],maxname[10],minname[10];
11 int MAXage =20140907; int MINage = 18140907;
12 while(cnt<n)
13 {
14 scanf("%s %d/%d/%d",name,&year,&mouth,&day);
15 int s = year*10000+mouth*100+day;
16 if(s>=18140907&&s<=20140907)
17 {
18 w++;
19 if(s<MAXage)
20 {
21 strcpy(maxname,name);
22 MAXage=s;
23 }
24 if(s>MINage)
25 {
26 strcpy(minname,name);
27 MINage=s;
28 }
29 }
30 cnt++;
31 }
32 if(w>0)
33 {
34 printf("%d %s %s",w,maxname,minname);
35 }
36
37 return 0;
38 }
~
运行结果