1.代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 int main(int argc, const char *argv[])
5 {
6 //以只写的形式打开文件
7 FILE *fp = NULL;
8 //打开文件,光标在开头
9 if((fp = fopen("./test.c", "r")) == NULL)
10 {
11 perror("fopen error");
12 return -1;
13 }
14
15 //读取文件内容
16 char rbuf[1]="";
17 while(1)
18 {
19 if(feof(fp))
20 break;
21 fread(rbuf, 1, sizeof(rbuf), fp);
22 //输出数据
23 fwrite(rbuf, 1, sizeof(rbuf), stdout);
24 }
25 fclose(fp);
26 return 0;
27 }
运行结果:
2.代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int do_register()
{
FILE *fp=NULL;
char user_name_register[20];
char pwd_reg[20];
//输入账号名和密码
printf("请输入注册帐号: ");
fgets(user_name_register,sizeof(user_name_register),stdin);
printf("请输入注册密码: ");
fgets(pwd_reg,sizeof(pwd_reg),stdin);
//将最后一个字符换成'\0'
user_name_register[strlen(user_name_register)-1]='\0';
pwd_reg[strlen(pwd_reg)-1]='\0';
fp=fopen("./test.c","a+");
if(fp==NULL)
{
perror("fopen error");
return -1;
}
fprintf(fp,"%s %s\n",user_name_register,pwd_reg);
fclose(fp);
printf("success");
return 0;
}
int do_login()
{
char user_name_register[20];
char pwd_reg[20];
printf("请输入登陆帐号: ");
//输入账户名和密码
fgets(user_name_register,sizeof(user_name_register),stdin);
printf("请输入登陆密码: ");
fgets(pwd_reg,sizeof(pwd_reg),stdin);
user_name_register[strlen(user_name_register)-1]='\0';
pwd_reg[strlen(pwd_reg)-1]='\0';
char username[20];
char pwd[20];
FILE *rfp=NULL;
if((rfp=fopen("./test.c","r"))==NULL)
{
perror("fopen error");
return -1;
}
while(1)
{
int res = fscanf(rfp,"%s %s",username,pwd);
if(res<0)
{
printf("登陆失败\n");
fclose(rfp);
return 1;
}
//比较账号名是否相同
if(strcmp(user_name_register,username)==0&&strcmp(pwd_reg,pwd)==0)
{
printf("登陆成功\n");
fclose(rfp);
return 1;
}
}
}
int main(int argc, const char *argv[])
{
char menu;
while(1)
{
printf("\t\t====1、注册====\n");
printf("\t\t====2、登陆====\n");
printf("\t\t====0、退出====\n");
printf("请输入功能: \n");
scanf("%c",&menu);
while(getchar()!='\n');
switch(menu)
{
case '1':
{
do_register();
}
break;
case '2':
{
do_login();
}
break;
case '0':
{
exit(EXIT_SUCCESS);//退出程序
}
default:
printf("error");
}
printf("请输入任意键清屏: \n");
while(getchar()!='\n');
system("clear"); //清屏
}
return 0;
}
运行结果:
3.代码:
1 #include<stdio.h>
2 int main(int argc, const char *argv[])
3 {
4 //定义文件指针打开文件
5 FILE *fp = NULL;
6 if((fp = fopen("./111.bmp", "r+")) == NULL)
7 {
8 perror("fopen error");
9 return -1;
10 }
11
12 //向后偏移两个字节得到文件的大小
13 fseek(fp, 2, SEEK_SET);
14
15 unsigned int size;
16 fread(&size, sizeof(size), 1, fp); //从文件中读取一个整形数据
17 printf("size = %d\n", size);
18
19 //想要更改像素
20 unsigned char color[3] = {255, 0, 0}; //纯蓝色
21
22 //将光标偏移到图像数据处
23 fseek(fp, 54, SEEK_SET);
24 for(int i=0; i<424; i++) //外行
25 {
26 for(int j=0; j<680; j++) //内列
27 {
28 fwrite(color, sizeof(color), 1, fp);
29 }
30 }
31 //关闭文件
32 fclose(fp);
33 return 0;
34 }
35
运行结果:
面试题目:
1、文件IO与标准IO的区别
文件IO依赖于系统提供的函数,而标准IO依赖于库函数
文件IO不需要经过缓冲区,而标准IO会经过缓冲区
2、什么是IO
IO就是输入和输出,实现文件与文件之间信息转换。
3、什么是文件指针
文件指针就是指向文件的指针。来源于标准IO库函数,包含了一个缓冲区和一个用于系统调用的文件描述符。
4、简述一下系统调用
系统调用就是文件IO,直接使用内核提供的函数进行操作。每次在系统调用时都会从用户空间转换到内核空间,效率相对较低
5、如何判断一个单向链表中有环
遍历链表后,看节点是否有重复。