准备
博主:大大怪先森(记得关注,下次不要迷路哦)
编程环境:xshell(点击下载)
所示代码:码源
提示:写完文章后,目录可以自动生成
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
本文将讲解linux当中的基础I/O的问题!!!
提示:以下是本篇文章正文内容
一、c语言文件接口(回顾)
C语言写文件:
#include<stdio.h>intmain(){
FILE* fp =fopen("./mytxt.txt","w");if(fp ==NULL){perror("fail\n");return-1;}char* buffer ="hello wzd\n";fputs(buffer, fp);fclose(fp);
fp =NULL;return0;}
C语言读文件:
#include<stdio.h>intmain(){
FILE* fp =fopen("./mytxt.txt","r");if(fp ==NULL){perror("fail\n");return-1;}int cnt =10;char arr[128]={0};rewind(fp);while(fgets(arr,sizeof(arr), fp)){printf("%s", arr);}fclose(fp);
fp =NULL;return0;}
C语言的三种标准流:
stdin & stdout & stderr
stdin :标准输入流,键盘
stdout :标准输出流,显示屏
stderr:标准错误流,显示屏
这三个流的类型都是FILE*, fopen返回值类型,文件指针
二、系统文件I/0
1.接口介绍
open(打开函数):
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
pathname: 要打开或创建的目标文件
flags: 打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成flags。
参数:
O_RDONLY: 只读打开
O_WRONLY: 只写打开
O_RDWR : 读,写打开
这三个常量,必须指定一个且只能指定一个
O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权限
O_APPEND: 追加写
返回值:
成功:新打开的文件描述符
失败:-1
其他接口
write read close lseek ,类比C文件相关接口
2.代码案例
代码如下(示例):
#include<stdio.h>2 #include<unistd.h>3 #include<sys/types.h>4 #include<sys/stat.h>5 #include<string.h>6 #include<fcntl.h>7intmain()8{9//FILE* fp = fopen("./log.txt","w");10//close(1);11//int fd = open("./log.txt",O_RDONLY | O_CREAT);12// int fd = open("./log.txt",O_RDWR);13// if(fd < 0)14// {15// perror("open");16// return 1;17// }18// dup2(fd,0);19// char line[128] = {0};20// fgets(line,sizeof(line) - 1,stdin);21// //while(fgets(line,sizeof(line) - 1,stdin))22// ///{23// // printf("%s",line);24// //}25// //fllush();26// fprintf(stdout,"hello wold\n");27// fputs("study well\n",stdout);28// write(1,line,strlen(line));29// //read(1,line,strlen(line));30// close(fd);31// close(1);32// int fp = open("log.txt",O_CREAT | O_WRONLY,0644);33//34// printf("%d\n",fp);35// fprintf(stdout,"hello wzd\n");36// fprintf(stdout,"study well\n");37// fprintf(stdout,"you will have mush money\n");38//char buff[64];39//ssize_t s = read(0, buff, sizeof(buff));40//buff[s-1] = 0;41constchar* msg ="hello world\n";42// printf("echo# %s\n", buff);43write(2, msg,strlen(msg));44write(2, msg,strlen(msg));45return0;46}
3.缓冲区
进程退出时,会将FILE内部的元素刷新到os缓冲区
用户刷新到os的刷新策略:
立刻刷新
行刷新(比如行缓冲):显示器刷新
缓冲满了才刷新(全刷新):比如:网磁盘文件写入;
1 #include<stdio.h>2 #include<string.h>3 #include<unistd.h>4 #include<sys/types.h>5 #include<sys/stat.h>6 #include<fcntl.h>7intmain()8{9// int fd = open("./log.txt",O_WRONLY | O_CREAT,0644);10// if(fd < 0)11// {12// perror("open");13// return -1;14// }1516char* msg ="hello wzd\n";17write(1,msg,strlen(msg));18fprintf(stdout,"study well\n");19fprintf(stdout,"you will have mush money\n");20fork();21//printf("hello world");22return0;23}
结果:
结语
希望本篇文章能给各位带来帮助,如有不足还请指正!!!
码字不易,各位大大给个收藏点赞吧!!!
宝子们,点赞,支持。
三连走一波!!!
版权归原作者 大大怪先森 所有, 如有侵权,请联系我们删除。