牛客Linux高并发服务器开发学习第五天

文件I/O

站在文件和内存的角度,输入输出的定义不同。

我们应该站在内存的角度去看文件的输入输出。

标准C库IO函数

与Linux系统的IO函数是对应关系。

先写到缓冲区,缓冲区满了,写到磁盘里,提高执行效率。 

虚拟地址空间

解决程序加载内存的一些问题。

可执行程序运行起来就会有一个虚拟地址空间,运行结束了就没有这个空间了。

用户区:

内核区:没有读写权限,需要API系统调用。

文件描述符

文件描述符存在于进程的内核区。

内核空间受保护,用户不能对该空间进行读写操作,否则会出现错误。

内核区包含内存管理,进程管理,设备驱动管理,VFS虚拟文件系统。

在内存管理模块里面有PCB(进程控制块),是一个非常复杂的结构体,其中有一个数组叫文件描述符表,大小为1024,可同时打开的文件最多就为1024个,每打开一个文件占用一个文件描述符,而且是空闲的最小的一个文件描述符。

一个文件可以被打开多次,每一次的文件描述符是不一样的。

Linux系统IO函数

open函数

       int open(const char *pathname, int flags);

       int open(const char *pathname, int flags, mode_t mode);

可以打开一个文件,也可以创建一个文件,根据flags标志位信息的不同,功能也不同。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include<unistd.h>
int main()
{int fd = open("a.txt",O_RDONLY); if(fd==-1){perror("open");}//关闭close(fd);//#include<unistd.h>return 0;
}

flags标志位的定义包含在前两个头文件里。

open函数包含在fcntl.h头文件里,

perror函数包含在unistd.h头文件里,

close函数包含在stdio.h头文件里。

参数:

            - pathname:要创建文件的路径

            - flag: 对文件的操作权限和其他的设置

                - 必选项:O_RDONLY,O_WRONLY,O_RDWR 这三个之间是互斥的

                - 可选项:O_CREAT 文件不存在,创建新文件

            - mode: 八进制的数,表示创建出的新的文件的操作权限,如0775

            The effective mode is modified by the process's umask  in the  usual  way:  in  the absence of a default ACL, the mode of the

            created file is (mode & ~umask).

            (mode & ~umask) umask为0002

            0777 ->111111111

        &   0775   111111101

----------------------------------

            0775   111111101

因此umask的作用就是抹去一些权限,当前用户不能控制其他用户的权限。

不同当前用户的umask不同,root的和当前用户的不同。

flags参数是一个int类型,4字节,32位。

flags 32位,每个位是一个标志位。

read、write函数

man 2 read/write

可以查看read/write函数说明

示例:写一个copyfile文件,将一个文本的内容,复制到一个新的文本中,其中包含读取文件、创建新文件,读文件,写文件,关闭文件等操作。

/*#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);*/
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include<stdio.h>int main()
{//通过open打开english.txt文件int srcfd = open("english.txt",O_RDONLY);if(srcfd == -1){perror("open");return -1;}//创建一个新的文件(拷贝文件)int destfd = open("cpy.txt",O_WRONLY | O_CREAT, 0664);if(destfd == -1){perror("open");return -1;}//频繁的读写操作char buf[1024] = {0};int len = 0;while(len = read(srcfd,buf,sizeof(buf))){write(destfd,buf,len);}close(destfd);close(srcfd);return 0;
}

学习进度:

Linux系统编程入门 05:52:14

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/4543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

车载系统的 加减串器应用示意

overview 车载系统上使用加减串器来实现camera&#xff0c; led液晶显示屏等 图像数据的远距离传输&#xff0c;将原先在短距离传输视频信号的mipi csi&#xff0c;dsi 等的TX&#xff0c;RX中间&#xff0c;插入加减串器&#xff0c;实现长距离的可靠传输。 示意图如下 往往…

uni-app如何监测获取页面视图出现

在 uni-app 中&#xff0c;监测页面视图的出现或渲染完成&#xff0c;可以使用生命周期函数和一些自定义方法。这里有一些常见的方法&#xff1a; 使用生命周期函数&#xff1a; uni-app 提供了与页面生命周期相关的函数&#xff0c;如 onLoad、onShow、onReady 等。 onLoad…

Vue从入门到精通-01-Vue的介绍和vue-cli

MVVM模式 Model&#xff1a;负责数据存储 View&#xff1a;负责页面展示 View Model&#xff1a;负责业务逻辑处理&#xff08;比如Ajax请求等&#xff09;&#xff0c;对数据进行加工后交给视图展示 关于框架 为什么要学习流行框架 1、企业为了提高开发效率&#xff1a;…

图像处理:乘法滤波器(Multiplying Filter)和逆FFT位移

一、乘法滤波器&#xff08;Multiplying Filter&#xff09; 乘法滤波器是一种以像素值为权重的滤波器&#xff0c;它通过将滤波器的权重与图像的像素值相乘&#xff0c;来获得滤波后的像素值。具体地&#xff0c;假设乘法滤波器的权重为h(i,j)&#xff0c;图像的像素值为f(m,…

Cranck-Nicolson隐式方法解线性双曲型方程

Cranck-Nicolson隐式方法解线性双曲型方程 Cranck-Nicolson方法在抛物型方程里面比较常用&#xff0c;双曲型方程例子不多&#xff0c;该方法是二阶精度&#xff0c;无条件稳定&#xff0c;然而&#xff0c;数值震荡比较明显&#xff0c;特别是时间演化比较大以及courant数比较…

网工内推 | 云计算运维,厂商云相关认证优先,股票期权,全勤奖

01 国科科技 招聘岗位&#xff1a;云计算运维 职责描述&#xff1a; 1、负责私有云平台的运维管理工作,包括云平台日常运维、故障处理、扩容、版本升级、优化和维护等。 2、根据业务需求,从技术角度支持及配合各业务系统上云工作。 3、为云上业务系统提供云产品、云服务方面的…

forEach和map中的break和continue是否生效

在 JavaScript 中&#xff0c;forEach() 和 map() 是数组的方法&#xff0c;它们都接受一个函数作为参数&#xff0c;并对数组中的每个元素执行该函数。虽然它们在功能上类似&#xff0c;但是它们的行为略有不同&#xff0c;特别是在处理函数内部的 break、continue 和 return …

python ERA5 画水汽通量散度图地图:风速风向矢量图、叠加等高线、色彩分级、添加shp文件、添加位置点及备注

动机 有个同事吧&#xff0c;写论文&#xff0c;让我帮忙出个图&#xff0c;就写了个代码&#xff0c;然后我的博客好久没更新了&#xff0c;就顺便贴上来了&#xff01; 很多人感兴趣风速的箭头怎样画&#xff0c;可能这种图使用 NCL 非常容易&#xff0c;很多没用过代码的小…

【idea】idea 中 git 分支多个提交合并一个提交到新的分支

一、方法原理讲解 我们在 dev 分支对不同的代码文件做了多次提交。现在我们想要把这些提交都合并到 test 分支。首先我们要明白四个 git 操作&#xff0c; commit&#xff1a;命令用于将你的代码变更保存到本地代码仓库中&#xff0c;它创建了一个新的提交&#xff08;commit…

idea的插件,反编译整个jar包

idea的插件&#xff0c;反编译整个jar包 1.安装插件1.1找到插件1.2 搜索插件 2.反编译整个jar包2.1 复制jar包到工件目录下&#xff1a;2.2 选中jar包&#xff0c;点出右键 3.不用插件&#xff0c;手动查看某一个java类3.1 选中jar包&#xff0c;点出右键 1.安装插件 1.1找到插…

Liunx作业控制

目录 作业控制之jobs 常用作业相关命令 1.查看当前CPU负载 2.查看当前磁盘负载 3.查看内存使用 4.linux启动过程 5.查看系统的版本和内核 6.修改主机名 作业控制之jobs 作业控制指的是控制正在运行的进程的行为。比如&#xff0c;用户可以挂起一个进程或者放到后台…

C# Solidworks二次开发:枚举应用实战(第七讲)

大家好&#xff0c;今天还是介绍我们枚举应用实战系列。 下面开始介绍枚举&#xff1a; &#xff08;1&#xff09;第一个为swTableColumnTypes_e&#xff0c;这个枚举的含义为表的类型&#xff0c;下面是官方的具体枚举值&#xff1a; MemberDescriptionswBendTableColumnT…

Linux网络编程---Socket编程

一、网络套接字 一个文件描述符指向一个套接字(该套接字内部由内核借助两个缓冲区实现。) 在通信过程中&#xff0c;套接字一定是成对出现的 套接字通讯原理示意图&#xff1a; 二、预备知识 1. 网络字节序 内存中的多字节数据相对于内存地址有大端和小端之分 小端法&…

同事上班这样摸鱼,我坐边上咋看他都在专心写代码啊

我边上有个同事&#xff0c;我坐他边上&#xff0c;但是每天看着他都眉头紧锁&#xff0c;忙的不亦乐乎&#xff0c;但终于有一天&#xff0c;我发现了他上班摸鱼的秘诀。 我劝你千万不要学会这4招&#xff0c;要不就该不好好上班了。 目录 1 上班看电影&#xff1f; 2 上班…

自建SQL server 服务无法启动,提示评估期已过

问题背景 在服务器内安装的SQL server无法启动&#xff0c;报错提示如下截图&#xff0c;提示错误代码17051&#xff1a; 结合系统日志查看应用程序日志详情提示评估期已过&#xff0c;报错如下 问题原因 出现此报错原因是SQL server 安装时&#xff0c;使用的评估版本&#xf…

网络安全的防护措施有哪些?

1. 安全策略和合规性 2. 物理和网络安全 3. 数据加密 4. 软件和系统更新 5. 访问控制 6. 威胁监测和响应 7. 员工培训和安全意识 8. 备份和灾难恢复 零基础入门学习路线 视频配套资料&国内外网安书籍、文档 网络安全面试题 网络安全的防护措施多种多样&#xff0c…

基于Spring Boot的商务安全邮件收发系统设计与实现

基于Spring Boot的商务安全邮件收发系统设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 已发送效果图&#xff0c;用户可以对已发送信息…

【GitHub】2FA认证(双重身份验证)

GitHub 2FA认证&#xff08;双重身份验证&#xff09; 写在最前面一、使用 TOTP 应用程序配置双2FA&#xff08;双因素身份验证&#xff09;1. 介绍2. github3. 认证 官网介绍小结 & 补充 &#xff1a;权限不足or验证码错误问题 &#x1f308;你好呀&#xff01;我是 是Yu欸…

超图 openlayers 根据多边形数据展示图层(根据coordinates限制图层范围=》裁剪)

图层的feature var geometry feature.getGeometry(); // 具体的坐标点列表&#xff08;数组形式&#xff09; let coordinates geometry.getCoordinates(); // 转换坐标数组为ol.geom.Polygon let geometry new geom.MultiPolygon([data.coordinates]); let zslayer …

张大哥笔记:普通人可以靠知识付费赚到钱吗?

大家好&#xff0c;我是张大哥&#xff0c;今天给大家聊聊普通人怎么做知识付费赚钱这个话题&#xff0c;首先科普一下&#xff0c;什么是知识付费&#xff1f;把知识变成产品或服务&#xff0c;以实现商业价值的行为就是知识付费&#xff01; 做知识付费类的项目&#xff0c;首…