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

狠狠做狠狠干免费网站本地服务推广平台哪个好

狠狠做狠狠干免费网站,本地服务推广平台哪个好,做百度移动网站快速,网站没有备案文章目录 一、再来理解重定向1.1 输出重定向效果演示1.2 重定向的原理1.3 dup21.4 输入重定向效果演示1.5 输入重定向代码实现 二、再来理解标准输出和标准错误2.1 同时对标准输出和标准错误进行重定向2.2 将标准输出和标准错误重定向到同一个文件 三、再看一切皆文件四、结语 …

在这里插入图片描述

文章目录

  • 一、再来理解重定向
    • 1.1 输出重定向效果演示
    • 1.2 重定向的原理
    • 1.3 dup2
    • 1.4 输入重定向效果演示
    • 1.5 输入重定向代码实现
  • 二、再来理解标准输出和标准错误
    • 2.1 同时对标准输出和标准错误进行重定向
    • 2.2 将标准输出和标准错误重定向到同一个文件
  • 三、再看一切皆文件
  • 四、结语

一、再来理解重定向

1.1 输出重定向效果演示

在这里插入图片描述
分析ls 指令是显示当前目录下的文件,本质就是将当前目录下所有的文件名以字符串的形式写入到显示器文件。采用输出重定向 >,将原本应该写入显示器文件的内容写入到了 log.txtx 文件中。

1.2 重定向的原理

在讲解重定向原理前,我们需要明确文件描述符的分配规则,即从0下标开始,寻找最小的没有使用的数组位置,它的下标就是新打开文件的文件描述符。这里没有使用的意思是该下标里面存的是 NULL,即没有指向任何一个文件对象。下面通过一段代码来为大家展示重定向的原理。

// mytest.c
int main()
{close(1);int fd = open(FILE_PATH, O_WRONLY | O_CREAT | O_TRUNC, 0666);if(fd < 0){perror("open");return errno;}const char* str = "Hello Linux!\n";int cnt = 5;while(cnt--){write(1, str, strlen(str));}return 0;
}

代码分析:上面这段代码就完美的展示了重定向的原理。首先调用 close 系统调用将 1 号下标对应的文件关闭,关闭的意思就是将 1 下标里的内容置为 NULL,原本 1 下标里面存储的内容是显示器文件对象的地址,也就是标准输出 stdout,紧接着调用 open 打开了一个文件,根据文件描述符的分配规则,新打开的这个文件的文件描述符就是 1,即文件描述符表(file*的数组)1 号下标里面存储的就是新打开的文件对象的地址。接下来调用 write 接口,向 1 号文件描述符中进行写入,本来 1 号文件描述符对应的是显示器文件,原本向显示器文件中写入的内容,此时就被写入到新打开的文件中,没有向显示器文件中写入,因此屏幕上就不会出现字符串,至此整个重定向的过程就结束啦。

在这里插入图片描述
总结:重定向的本质是对数组下标里面的内容进行修改。
在这里插入图片描述

1.3 dup2

上面介绍了重定向的原理,下面介绍一下实现重定向的系统调用 dup2

#include <unistd.h>
int dup2(int oldfd, int newfd);

dup2 的具体实现并不是向上面代码中那样,先将一个文件描述符关闭,然后紧接着再打开一个文件。dup2 的使用方法是,用户在调用 dup2 接口前,正常打开一个文件,不用将显示器文件关闭,此时新打开文件的文件描述符就是 3。接下来调用 dup2 ,将新打开文件的文件描述符作为 oldfd,将显示器文件的文件描述符也就是 1,作为 newfd。我们知道,文件描述符本质上就是数组下标,dup2 函数中执行的工作就是将 oldfd 下标里存储的文件对象地址拷贝到 newfd 下标里面,至此重定向工作就完成了。
在这里插入图片描述
小Tipsdup2 的函数形参有一个误导,我们可能会觉得新打开文件的描述符是 newfd,其实不然,这里的 newfd 是将要被覆盖的文件描述符,oldfd 是新打开文件的描述符。

int main()
{// close(1);int fd = open(FILE_PATH, O_WRONLY | O_CREAT | O_TRUNC, 0666);if(fd < 0){perror("open");return errno;}dup2(fd, 1);const char* str = "Hello Linux!\n";int cnt = 5;while(cnt--){write(1, str, strlen(str));}return 0;
}

在这里插入图片描述
代码分析:上面就是输出重定向的实现原理,追加重定向只需要把 O_TRUNC 替换成 O_APPEND

1.4 输入重定向效果演示

在这里插入图片描述
分析cat 指令本来是从键盘文件中获取输入然后写入显示器文件中,采用输入重定向 < 后,是从 log.txt 文件中获取输入然后写入显示器文件中。

1.5 输入重定向代码实现

// 输入重定向
int main()
{int fd = open(FILE_PATH, O_RDONLY);if(fd < 0){perror("open");}dup2(fd, 0);char str[1024];ssize_t ret = read(fd, str, sizeof(str) - 1);if(ret > 0){str[ret] = '\0';printf("echo: %s", str);}return 0;
}

在这里插入图片描述
小Tips:进程历史打开的文件与进行的各种重定向关系都和未来进行的程序替换无关,程序替换并不影响文件访问。进程打开文件和何种重定向工作,本质上都是进程管理的模块,而程序替换只会把用户空间的代码和数据完全被新程序替换,不会影响到进程管理。

二、再来理解标准输出和标准错误

int main()
{fprintf(stdout, "Standard output messages\n");fprintf(stdout, "Standard output messages\n");fprintf(stdout, "Standard output messages\n");fprintf(stderr, "Standard error messages\n");fprintf(stderr, "Standard error messages\n");fprintf(stderr, "Standard error messages\n");return 0;
}

在这里插入图片描述
代码分析> 是输出重定向,也就是对标准输出(1号文件描述符)进行重定向。标准错误对应的2号文件描述符并没有进行重定向,因此标准错误消息仍然打印在了屏幕上。

2.1 同时对标准输出和标准错误进行重定向

./mytest 1>output.txt 2>error.txt

小Tips:这段代码就是将1号文件描述符对应的标准输出文件重定向到 output.txt 文件,将2号文件描述符对应的标准错误文件重定向到 error.txt 文件。这样以来屏幕上就不会有任何输出。

在这里插入图片描述

2.2 将标准输出和标准错误重定向到同一个文件

./mytest 1>all.txt 2>&1

在这里插入图片描述
小Tips:将标准输出和标准错误都重定向到 all.txt 文件中。

三、再看一切皆文件

所有操作计算机的动作,都是通过进程去执行的,所有的访问文件操作,都是通过进程去实现的,目前所有对文件的操作都依赖于进程。
在这里插入图片描述

小Tips:所有的外设都被抽象成了文件,每个外设都有自己的读写方法,不同的外设读写方法一定是不同的。但是我们在对文件进行读写操作的时候,始终调用的都是 readwrite 方法,这是因为操作系统为我们提供了一个方法集类型 file_operations,该结构体里面都是函数指针类型,指向外设的各种方法,这就是多态的雏形。所谓的一切皆文件,就是操作系统帮我们封装了一层文件对象,进程对各种外设的操作,全都变成了对文件的操作。

sszie_t read(int fd)
{task_struct->files->fd_array[fd]->f_op->read();
}

四、结语

今天的分享到这里就结束啦!如果觉得文章还不错的话,可以三连支持一下,春人的主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是春人前进的动力!

在这里插入图片描述

http://www.yidumall.com/news/8876.html

相关文章:

  • 东莞学做网站爱情链接
  • 用asp做的几个大网站百度竞价推广方案范文
  • 测试工程师要学什么提升关键词排名seo软件
  • 做市级网站需要什么意思怎么去推广自己的产品
  • 佛山网站建设app网页搜索优化seo
  • 自设计网站免费下载b站视频软件
  • 能答题做试卷的网站免费ip地址代理
  • 嘉兴网站制作多少钱线下实体店如何推广引流
  • 想找个人做网站利搜网站排名软件
  • 佛山微信网站开发百度集团总部在哪里
  • 基于php技术的网站建设百度在线使用
  • 如何把网站放在根目录视频营销的策略与方法
  • 学校网站建设的好处网络营销模式包括哪些
  • 百胜招聘 网站开发广州seo外包公司
  • 龙岗区网站建设哪个公司好设计网站官网
  • 网站网站制作网页设计与制作软件
  • 贵阳网站建设公司招聘电脑培训班零基础网课
  • 温州市网站制作公司市场营销培训
  • 做360全景的网站网络推广学校
  • 秦皇岛网站制作 微商城建设秦洁婷seo博客
  • 广东建设信息中心官网宁波seo营销平台
  • 怎么做 代刷网站市场营销四大基本策略
  • 做网站的费用计入什么费用在线生成个人网站免费
  • 中国建设银行的网站色彩百度关键词排名查询接口
  • 怎么样在虚拟机做web网站seo整站优化外包公司
  • 邓州市网站建设网站流量指标有哪些
  • wordpress建站免费教程搜索引擎营销的方法
  • 免费企业网站建设介绍爱站网站排行榜
  • 做视频网站要注意什么百度知道登录
  • 医院网站建设 费用app开发工具