0


Linux中的基础I/O

准备

博主:大大怪先森(记得关注,下次不要迷路哦)
编程环境: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}

结果:
在这里插入图片描述

结语

希望本篇文章能给各位带来帮助,如有不足还请指正!!!
码字不易,各位大大给个收藏点赞吧!!!

宝子们,点赞,支持。
三连走一波!!!
在这里插入图片描述

标签: linux 服务器 centos

本文转载自: https://blog.csdn.net/wzd547191555/article/details/124135738
版权归原作者 大大怪先森 所有, 如有侵权,请联系我们删除。

“Linux中的基础I/O”的评论:

还没有评论