标准io
标准输入输出(Standard Input/Output,简称 I/O)是编程中用于数据交换的一种基本概念
标准输入
通常是键盘输入,但也可以是重定向的文件或其他输入源。
标准输出
用于将数据发送到终端或另一个输出设备,显示器是标准输出设备
Linux操作系统当中IO都是对文件的操作
文件
概念:linux中一切都是文件。
作用:文件用来存储数据(数据,指令)
文件类型包括普通文件、目录文件、字符设备文件、块设备文件、符号链接、管道、套接字等
相关函数
标准IO:
ANSI C 设计的一组用文件IO 封装的操作库函数
头文件: stdio.h ==》标准输入输出头文件
/usr/include/stdio.h
<> 是系统库函数,默认路径在/usr/include/
" " 是用户自定义函数,默认是当前路径
如果不了解函数的用法,可以通过man手册进行查询
用法:man 1 xxx ===>查看当前xxx命令
大多数情况只用 1(shell命令)、2(系统调用)、3(库函数)三个部分来查找函数就足够了
fgetc/fputc
是C语言标准库中的函数,用于从文件中读取单个字符和向文件写入单个字符。
函数原型:int fgetc(FILE *stream);
返回值:
成功读取时返回读取的字符的ASCII码。
到达文件末尾或发生错误时返回EOF(通常是-1)
#include <stdio.h>
int main()
{
FILE *file = fopen("example.txt", "r");
if (file == NULL)
{
perror("Error opening file");
return -1;
}
int ch;
while ((ch = fgetc(file)) != EOF)
{
putchar(ch); // 将读取的字符输出到标准输出
}
fclose(file);
return 0;
}
函数原型:int fputc(int c, FILE *stream);
#include <stdio.h>
int main()
{
FILE *file = fopen("output.txt", "w");
if (file == NULL)
{
perror("Error opening file");
return -1;
}
int ch = 'A'; // 要写入的字符
if (fputc(ch, file) == EOF)
{
perror("Error writing to file");
fclose(file);
return -1;
}
fclose(file);
return 0;
}
fgets/fputs
用于从文件中读取字符串和向文件写入字符串。
函数原型:char *fgets(char *str, int num, FILE *stream);
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE * fp = fopen("/etc/passwd","r");
if(NULL == fp)
{
printf("fopen error\n");
return 1;
}
char buf[1024]={0};// 1k-4k
while(1)
{
char* s = fgets(buf,sizeof(buf),fp);
if(NULL == s)
{
break;
}
printf("%s\n",buf);
}
fclose(fp);
return 0;
}
函数原型:int fputs(const char *str, FILE *stream);
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE * fp = fopen("1.txt","w");
if(NULL == fp)
{
printf("fopen error\n");
return 1;
}
char data[]="hello,world";
int ret = fputs(data,fp);
if(EOF == ret)
{
printf("fputs error\n");
return 1;
}
fclose(fp);
return 0;
}
fread/fwrite
函数原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
#include <stdio.h>
#include <string.h>
typedef struct
{
char name[50];
int age;
char phone[15];
}PER;
int main(int argc, char *argv[])
{
FILE * fp = fopen("1.txt","r");
if(NULL == fp)
{
printf("fopen error\n");
return 1;
}
PER per;
bzero(&per,sizeof(per));
size_t ret= fread(&per,sizeof(per),1,fp);
printf("name:%s age:%d phone:%s\n",per.name,per.age,per.phone);
if(ret!=1)
{
printf("fread error\n");
return 1;
}
fclose(fp);
return 0;
}
函数原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
#include <stdio.h>
#include <string.h>
typedef struct
{
char name[50];
int age;
char phone[15];
}PER;
int main(int argc, char *argv[])
{
FILE * fp = fopen("1.txt","w");
if(NULL == fp)
{
printf("fopen error\n");
return 1;
}
PER per;
strcpy(per.name ,"zhangsan");
per.age = 20;
strcpy(per.phone,"111222333");
size_t ret = fwrite(&per,sizeof(per),1,fp);
if(ret!=1)
{
printf("fwrite error\n");
return 1;
}
fclose(fp);
return 0;
}