首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux c——dup( )和dup2( )函数详解

dup()函数和dup2()函数书上在文件操作那一章,已经讲过了,这周看重定向这块,发现它挺重要,就再看了回,记录下。...当复制成功是,返回最小的尚未被使用过的文件描述符,若有错误则返回-1.错误代码存入errno中返回的新文件描述符和参数oldfd指向同一个文件,这两个描述符共享同一个数据结构,共享所有的锁定,读写指针和各项全现或标志位...dup2所复制的文件描述符与原来的文件描述符共享各种文件状态。共享所有的锁定,读写位置和各项权限或flags等. 返回值: 若dup2调用成功则返回新的文件描述符,出错则返回-1....dup2(oldfd, newfd)等效于 close(oldfd); fcntl(oldfd, F_DUPFD, newfd); 在shell的重定向功能中,(输入重定向”和输出重定向...”>”)就是通过调用dup或dup2函数对标准输入和标准输出的操作来实现的。

2.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    linux系统下dup和dup2函数解析

    ----今天接着昨天的话题讲,在昨天的文章里面,我们讲到了文件共享有三种实现方式,其中一种实现方式就是我们今天要讲的dup和dup2函数来实现了;那么咋们也就不废话 了,直接直奔主题吧。...下面我们还是来看代码示例和试验现象: #include #include #include #include ...\n",fd2); close(fd1); return -1; } 2、dup返回的fd和原来的oldfd都指向oldfd打开的那个【动态文件】,操作这两个fd实际操作的都是oldfd打开的那个文件...函数解析: 1、相比于dup函数,dup2函数它的优势就是可以指定新的文件描述符的大小,用法比较灵活。...\n", fd2); close(fd1); return -1; } 2、dup2和dup函数一样对文件写操作都是接续写的,这里我就不做演示了,写法和dup函数一样。

    99330

    用指针的观点来深入理解dup和dup2的用法

    用指针的观点来深入理解dup和dup2的用法 作者:ejian 2007-09-17 网上有很多资料详细讲解了dup和dup2的用法,有讲得不错的,但总感觉理解起来还是有点困难,通过实践,我发现一种C程序更容易理解的讲解方法...-使用类比指针的方法来阐述dup和dup2的用法,可能更容易让人在非常短的时间内接受,下面的内容是我理解dup和dup2用法的总结,希望对dup和dup2存有疑惑的朋友所有帮助。...fd[0]; // 从这里可以看出STDIN_FILENO和stdinp指向了不同的位置 dup2(fd[0], STDIN_FILENO); // 在这里可以关闭fd[0],因为我们还可以通过STDIN_FILENO...和stdinp现在又都指向了相同的地方,所以stdinp已经完成历史使命,这个时候可以关闭它了: close(stdinp); // 这个当然相当于: stdinp = NULL; 至此,dup2&dup2...不过,还有一点要请各位注意,dup和dup2的改变指向时会分配内存,所以在不使用时要记得打开,否则 你可能遇到“打开的文件过多”的错误,比如: int* stdinp =dup(STDIN_FILENO

    1.3K10

    MySQL括号字符串计数

    \\]', 'A')) order by r; \\[ 和 \\] 用于将中括号转义为普通字符。...如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。又比如模式 src=`.*?...`,它将会匹配 src=` 开始,以 ` 结束的尽可能短的字符串,且开始和结束中间可以没有字符,因为*表示零到多个。...不使用正则表达式 MySQL 5.6版本中还没有提供正则表达式功能,无捷径可循,只能用常规SQL解决。...也直接求长度,如“ 赞赞赞赞赞”;否则,“[”是第一个字符的,表示是中括号中的字符串,按规则其长度为1,如“[满分'”、“[握手'”、“[手套”;否则,取“[”前面字符串的长度加1,如“谢谢友友的支持和鼓励

    1.3K20

    MySQL审计数据归档演示

    示例内容使用以SQL和python模式运行的MySQL Shell。 将展示一些的其他技巧包括: 从JSON审计数据中提取行–使用JSON_TABLE函数将JSON数据转换为表格式。...由于安全性、分析等多种原因,最佳做法是经常从MySQL服务器上获取审计数据,并将其收集到一些中央数据存储中,您可以在其中查看所有MySQL服务器上的活动。为什么会这样做?...将要提取审计数据的每个服务器都有一个帐户,该帐户通过SQL连接读取审计数据,并从审计文件中读取JSON数据。 首先让我们以管理员身份登录到归档MySQL服务器实例上–我将使用root。...步骤7 –生成一些审计数据活动 以各种用户身份在安装mysql企业审计的服务器上运行一些SQL查询。...但是,如果已经加载了先前的数据,那么我将获得插入的最后一个时间戳和事件ID,并将其用作审计数据的指针–在这种情况下,JSON搜索字符串中没有“start”。

    89140

    MySQL科学计数法展示解惑

    一、问题引入 二、代码跟踪 三、总结 ---- 一、问题引入 今天遇到一个很奇怪的问题,在MySQL客户端输入,用不同科学计数法表示的数值,展示效果却截然不同: mysql> select 1e+14,1e...,一个是用完全展开的形式表示,另外一个却变成用科学计数法来表示?...二、代码跟踪 我们知道,在MySQL中解析这类科学计数法的标识token,是通过BISON来进行词法和语法解析的,并最终转成Item类型,Item构造初始化的堆栈如下所示: #0 Item_float...... } } 三、总结 经过代码的调用分析,发现最终的结论和输入数据的现象相符。当我们在使用MySQL过程中,遇到问题的时候,不要慌乱。...GreatSQL特性 | 深入浅出MGR MySQL 8.0.30动态redo log初探 MySQL中USER()和CURRENT_USER()的区别 浅谈 MySQL 新的身份验证插件 caching_sha2

    83730

    MySQL科学计数法展示解惑

    一、问题引入 二、代码跟踪 三、总结 ---- 一、问题引入 今天遇到一个很奇怪的问题,在MySQL客户端输入,用不同科学计数法表示的数值,展示效果却截然不同: mysql> select 1e+14,1e...,一个是用完全展开的形式表示,另外一个却变成用科学计数法来表示?...二、代码跟踪 我们知道,在MySQL中解析这类科学计数法的标识token,是通过BISON来进行词法和语法解析的,并最终转成Item类型,Item构造初始化的堆栈如下所示: #0 Item_float...... } } 三、总结 经过代码的调用分析,发现最终的结论和输入数据的现象相符。当我们在使用MySQL过程中,遇到问题的时候,不要慌乱。...可以尝试从源码分析的角度作为切入点,从根源上理解这种现象触发的原因,更能进一步加深我们对数据库运行机制的了解和掌握。

    1.2K30

    MySQL计数器、每日计数器表设计与调优

    计数器 如果应用在表中保存计数器,则在更新计数器时可能碰到并发问题。计数器表在Web应用中很常见。可以用这种表缓存一个用户的朋友数、文件下载次数等。...创建一张独立的表存储计数器通常是个好主意,这样可使计数器表小且快。使用独立的表可以帮助避免查询缓存失效,并且可以使用本节展示的一些更高级的技巧。...要获得更高的并发更新性能,也可以将计数器保存在多行中,每次随机选择一行进行更新。...另外一个常见的需求是每隔一段时间开始一个新的计数器(例如,每天一个)。...SET c.cnt = IF(c.slot = x.mslot, x.cnt, 0), c.slot = IF(c.slot = x.mslot, 0, c.slot); 内容参考自《高性能MySQL

    2.4K20

    闭包和计数器

    假如我们想制作一个计数器,每点击一次就加一,代码如下: var counter = 0; //把计数器counter设置成全局变量 function add(){ return counter+=1;...} add(); //1 add(); //2 add(); //此时counter=3 >>固然可以实现功能,但问题就在于其他语句也有可能会改动到counter,这样的计数器是不安全的。...counter为1 add(); //counter为1 add(); //counter为1 >>固然保证了counter不会被其他语句影响到,但问题就在于每次调用函数都会重置counter,无法实现计数功能...闭包函数常见的一种用途就是上面例子中的—–实现计数功能。 2、实现封装: 自由变量只能被闭包函数本身或者其子函数访问,而不能被闭包函数之外的函数访问。这就实现了面向对象的封装性,更安全更可靠。

    1.1K10

    MySQL战记:Count( *)实现之谜与计数策略的选择

    Redis 和 MySQL 是两个独立的数据源,我们需要解决并发环境下数据不一致的问题,一般我们都会先更新数据库,再删缓存。...因为 Redis 和 MySQL 是不同的存储构成的系统,不支持分布式事务,所以没法保证计数的精确性。在数据库保存计数根据上面的分析,用缓存系统保存计数有丢失数据和计数不精确的问题。...利用事务来解决时序2 图中的问题,如下所示:因为MySQL 事务机制和 MVCC,在 T3时刻会话B进行的操作不受会话A 的影响,因为会话A在 T4才提交事务,T2做的修改对会话B不可见。...Redis和MySQL是不同的存储系统,它们不支持分布式事务,因此无法提供精确一致的视图。这就是为什么将计数值存储在Redis中无法确保与MySQL表中数据的一致性。...相比之下,将计数值存储在MySQL中可以解决一致性视图的问题。

    9510
    领券