标准io的概念
IO input output
I: 键盘是标准输入设备 ====》默认输入就是指键盘
O: 显示器是标准输出设备 ==》默认输出就是指显示器
Linux操作系统当中IO都是对文件的操作
man
man man ==>所有man的帮助
man xxx == man 1 xxx ===>查看当前xxx命令
man 2 xxx ===>查看xxx对应的系统调用函数
man 3 xxx ===》查看xxx对应的标准库函数
fopen
fopen 是 C 语言标准库中用于打开文件的函数。它定义在 stdio.h 头文件中,并返回一个指向 FILE 结构的指针,该结构包含了有关打开文件的信息。fopen 函数的原型如下:
FILE *fopen(const char *filename, const char *mode);
这里的 filename 参数是一个指向字符串的指针,指定了要打开的文件的名称。mode 参数是另一个字符串,指定了文件的打开模式,可以是以下几种之一:
1."r":以只读方式打开现有文件。
2."w":以只写方式打开文件,如果文件已存在则清空其内容;如果文件不存在则创建一个新文件。
3."a":以追加方式打开文件,如果文件不存在则创建一个新文件;如果文件已存在则在文件末尾追加内容。
4."r+":以读写方式打开文件,文件必须存在。
5."w+":以读写方式打开文件,如果文件不存在则创建一个新文件;如果文件已存在则清空其内容。
6."a+":以读写方式打开文件,如果文件不存在则创建一个新文件;如果文件已存在则在文件末尾追加内容。
打开文件:FILE *fopen(const char *path, const char *mode);
关闭文件:int fclose(FILE *stream);
字符读写:int fgetc(FILE *stream);
int fputc(int char, FILE *stream);
行读写:char *fgets(char *str, int n, FILE *stream);
int fputs(const char *str, FILE *stream);
块读写:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
fgets
char *fgets(char *str, int n, FILE *stream);
1.str 是一个指向字符数组的指针,用于存放读取到的字符串。
2.n 是要读取的最大字符数,包括终止字符 \0。
3.stream 是一个指向 FILE 对象的指针,指定了输入流。
如果在读取 n-1 个字符之前遇到文件结束或读取错误,fgets 会停止读取并返回 NULL。如果成功读取,fgets 会在字符串末尾添加 \0,并返回 str。
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
if(argc<3)
{
printf("usage:./a.out filename1 filename2\n");
return 1;
}
FILE* src = fopen(argv[1],"r");
FILE* dst = fopen(argv[2],"w");
if(NULL == src ||NULL == dst)
{
printf("fopen error\n");
return 1;
}
char buf[1024]={0};
while(1)
{
memset(buf,0,sizeof(buf));
if(fgets(buf,sizeof(buf),src))
{
//printf("%s\n",buf);
fputs(buf,dst);
}
else
{
break;
}
}
fclose(dst);
fclose(src);
return 0;
}
fputs
int fputs(const char *str, FILE *stream);
1.str 是一个指向包含要写入字符串的指针。
2.stream 是一个指向 FILE 对象的指针,指定了输出流。
如果成功写入,fputs 返回非负数,表示写入的字符数;如果发生错误,返回 EOF。
#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 buf[500]="你好,fgets测试";
int ret = fputs(buf,fp);
if(EOF == ret)
{
printf("fputs errors\n");
return 1;
}
fclose(fp);
return 0;
}
fgetc
int fgetc(FILE *stream);
这里的 stream 是一个指向 FILE 结构的指针,指向已打开的文件流。fgetc 函数在读取成功时返回读取到的字符(作为 int 类型),以便能够表示文件末尾的特殊值 EOF。如果到达文件末尾或发生读取错误,fgetc 返回 EOF。
int main(int argc, char *argv[])
{
FILE* fp = fopen("1.txt","r");
if(NULL == fp)
{
printf("fopen error");
return 1;
}
while(1)
{
int c = fgetc(fp);
if(EOF ==c) // -1
{
break;
}
printf("%c",c);
}
printf("\n");
fclose(fp);
return 0;
}
fputc
int fputc(int char, FILE *stream);
char 参数是要写入文件的字符(作为 int 类型),stream 是一个指向 FILE 结构的指针,指向目标文件流。fputc 在写入成功时返回写入的字符,如果发生写入错误,则返回 EOF。
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE* src = fopen("1.txt","r");
FILE* dst =fopen("2.txt","w");
if(NULL == src || NULL == dst)
{
printf("fopen error");
return 1;
}
while(1)
{
int c = fgetc(src);
if(EOF == c)
{
break;
}
fputc(c,dst);
}
fclose(dst);
fclose(src);
return 0;
}
fwrite
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
1.ptr 是一个指向要写入数据的缓冲区的指针。
2.size 是每个数据项的大小(以字节为单位)。
3.nmemb 是要写入的数据项的数量。
4.stream 是一个指向 FILE 对象的指针,指定了输出流。
5.fwrite 函数返回成功写入的数据项数量,如果发生写入错误或达到文件末尾,返回值为0。
fread
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
1.ptr 是一个指向缓冲区的指针,用于存放读取到的数据。
2.size 是每个数据项的大小(以字节为单位)。
3.nmemb 是要读取的数据项的数量。
4.stream 是一个指向 FILE 对象的指针,指定了输入流。
5.fread 函数返回成功读取的数据项数量,如果达到文件末尾或发生读取错误,返回的数量可能小于 nmemb。