当前位置: 首页 > news >正文

【Linux】基础IO

文章目录

  • 1.回顾C文件接口
    • 1.1 hello.c写文件
    • 1.2 hello.c读文件
    • 1.3 输出信息到显示器,你有哪些方法
    • 1.4 stdin & stdout & stderr
    • 1.5 总结
    • 1.6 系统文件I/O
  • 2. open函数返回值

本节重点
1.复习C文件IO相关操作
2.认识文件相关系统调用接口
3.认识文件描述符,理解重定向
4.对比fd和FILE,理解系统调用和库函数的关系
5.理解文件系统中inode的概念
6.认识软硬链接,对比区别
7.认识动态静态库,学会结合gcc选项,制作动静态库

1.回顾C文件接口

1.1 hello.c写文件

#include <stdio.h>
#include <string.h>int main()
{FILE *fp = fopen("myfile", "w");if(!fp){printf("fopen error!\n");}const char *msg = "hello bit!\n";int count = 5;while(count--){fwrite(msg, strlen(msg), 1, fp);}fclose(fp);return 0;
}

1.2 hello.c读文件

#include <stdio.h>
#include <string.h>int main()
{FILE *fp = fopen("myfile", "r");if(!fp){printf("fopen error!\n");}char buf[1024];const char *msg = "hello bit!\n";while(1){//注意返回值和参数,此处有坑,仔细查看man手册关于该函数的说明ssize_t s = fread(buf, 1, strlen(msg), fp);if(s > 0){buf[s] = 0;printf("%s", buf);}if(feof(fp)){break;}}fclose(fp);return 0;
}

1.3 输出信息到显示器,你有哪些方法

#include <stdio.h>
#include <string.h>
int main()
{const char *msg = "hello fwrite\n";fwrite(msg, strlen(msg), 1, stdout);printf("hello printf\n");fprintf(stdout, "hello fprintf\n");return 0;
}

1.4 stdin & stdout & stderr

1.C默认会打开三个输入输出流,分别是stdin,stdout,stderr
2.仔细观察发现,这三个流的类型都是FIFE*,fopen的返回值类型,文件指针

1.5 总结

1.打开文件的方式

r  Open test file for reading.The stream is postioned at the beginning of the file.r+ Open for reading and writing.The stream is positioned at the beginning of the file.w  Truncate(缩短) file to zero length or create text file for writing.The stream is positioned at the beginning of the file.w+ Open for reading and writing.The file is created if it does not exist, otherwise it is truncated.The stream is positioned at the beginning of the file.a  Open for appending (writing at end of file). The file is created if it does not exist. The stream is positioned at the end of the file.a+ Open for reading and appending (writing at end of file).The file is created if it does not exist. The initial file positionfor reading is at the beginning of the file, but output is always appended to the end of the file.

如上,是学习C语言文件操作时学到的相关操作。还有fseek、ftell、rewind等函数,在C部分也有所涉猎就,要及时拿出来复习。

1.6 系统文件I/O

操作文件,除了上述C接口(当然,C++也有接口,其他语言也有),我们还可以采用系统接口来进行文件访问,先来直接以代码的形式,实现和上面一模一样的代码:
hello.c 写文件:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
int main()
{umask(0);int fd = open("myfile", O_WRONLY|O_CREAT, 0644);if(fd < 0){perror("open");return 1;}int count = 5;const char *msg = "hello bit!\n";int len = strlen(msg);while(count--){write(fd, msg, len);//fd: 后面讲, msg:缓冲区首地址, len: 本次读取,期望写入多少个字节的数据。 返回值:实际写了多少字节数据}close(fd);return 0;
}

hello.c读文件

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
int main()
{int fd = open("myfile", O_RDONLY);if(fd < 0){perror("open");return 1;}const char *msg = "hello bit!\n";char buf[1024];while(1){ssize_t s = read(fd, buf, strlen(msg));//类比writeif(s > 0){printf("%s", buf);}else{break;}}close(fd);return 0;
}

接口介绍
open man open
在这里插入图片描述

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
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

mode_t理解:直接 man 手册,比什么都清楚。
open 函数具体使用哪个,和具体应用场景相关,如目标文件不存在,需要open创建,则第三个参数表示创建文件的默认权限,否则,使用两个参数的open。

write read close lseek ,类比C文件相关接口。

2. open函数返回值


http://www.mrgr.cn/news/50769.html

相关文章:

  • 获取上海证券交易所和深圳证券交易所上市公司的实时股票数据
  • 三本非OA顶级快刊,IEEE Trans“灌水神刊”4个月录用!领域内佼佼者,你选谁?
  • 文件IO练习1
  • linux下找到包含某字符串的文件
  • 基于深度学习的AI生成式人脸图像鉴别原理
  • 使用Arcgis批量自动出图
  • 人物化身持有者每月奖励:十月版
  • 快速读懂cmmi认证
  • 计算机网络易混知识点
  • 面试后的想法
  • 2023年湖南省职业院校技能大赛(网络系统管理赛项)
  • 如何破解 AI 聊天机器人让它们吐露秘密!窥探 AI 系统指令的 10 种技巧
  • 如何防范网络赌博诈骗手段?
  • Ping32聚合搜索——让企业数据查找从此变得简单高效
  • SpringBoot中的RedisTemplate对象中的setIfAbsent()方法有什么作用?
  • 我店:绿色积分引领的消费新生态与商业奇迹
  • 吴恩达深度学习笔记(3)--深度学习的实际应用
  • 找对象成功率高的相亲软件有哪些?十大高成功率的脱单APP推荐!
  • 【学术会议-6】激发灵感-计算机科学与技术学术会议邀您参与,共享学术盛宴,塑造明天的科技梦想!
  • 数据治理实战:数仓治理要做什么