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

posix regcomp和regexec线程是否安全?具体来说,在GNU libc上?

首先,我们需要了解POSIX是一个操作系统接口标准,它定义了一组API,使得不同的操作系统可以提供一致的接口。在这个问题中,我们关注的是posix regcompregexec线程安全性的问题。

posix regcomp函数用于编译正则表达式,而regexec函数用于执行正则表达式匹配。在GNU libc上,这两个函数是线程安全的。

线程安全是指在多线程环境下,当多个线程同时访问共享资源时,程序能够正确地处理并避免竞争条件、死锁等问题。在这里,posix regcompregexec函数使用了线程局部存储(Thread Local Storage,TLS)来确保线程安全。

然而,需要注意的是,尽管这些函数在GNU libc上是线程安全的,但在其他实现中可能存在线程安全问题。为了确保代码的可移植性和安全性,建议在使用这些函数时采取适当的同步措施,例如使用互斥锁(mutex)或读写锁(rwlock)等。

总结一下,posix regcompregexec线程在GNU libc上是安全的。为了确保代码的可移植性和安全性,建议在使用这些函数时采取适当的同步措施。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C: GNU regex library (regex.h)正则表达式调用示例

GNU regex是GNU提供的跨平台的POSIX 正则表达式库(C语言)。 我也是最近才接触这个相对于C++/Java实现来说非常简陋,勉强够用的正则表达式库。...不算GNU提供的扩展函数,POSIX标准的regex库总共就4个函数regcomp,regerror,regexec,regfree, 以下以完整源码的方式调用以上函数完成对GNU regex library...如果只是想判断字符串是否匹配正则表达式,而不关心匹配的位置,执行regexec可以不需要填保存匹配结果的regmatch_t相关参数,即第3,4个参数(__nmatch,__pmatch)填0....如果字符串有多个匹配,regexec 不能通过一次调用找到字符串中所有满足匹配条件的字符串位置,所以需要通过步进偏移的方式循环查找字符串中所有匹配的字符串,每一次匹配的起始偏移是一次匹配到的字符串结束偏移...libgnurx-msvc 以上代码MSVCgcc编译运行通过。

87130

C语言使用正则表达式

–来自百度百科   c语言中,用regcompregexec、regfree regerror处理正则表达式。...处理正则表达式分三步: 编译正则表达式,regcomp; 匹配正则表达式,regexec; 释放正则表达式,regfree。...REG_EXTENDED:使用POSIX扩展正则表达式语法解释的正则表达式。如果没有设置,基本POSIX正则表达式语法。 REG_ICASE:忽略字母的大小写。...参数说明: Errcode:Regcompregexec出错时的返回值 Preg:经过Regcomp编译的regex_t结构体指针。 Errbuf:错误信息放置的位置。...regexec()时,eflags是否设置了REG_NOTBOL;   4.匹配结束运算符($)遇到空字符串立即换行,不论执行regexec()时,eflags是否设置了REG_NOTEOL;   不明白说的是什么

2.2K30

C:基于GNU regex(regex.h)regexec实现正则表达式多次匹配

GNU regex是GNU提供的跨平台的POSIX 正则表达式库(C语言)。...不算GNU提供的扩展函数,POSIX标准的regex库总共就4个函数regcomp,regerror,regexec,regfree....我们知道 regexec 不能通过一次调用找到字符串中所有满足匹配条件的字符串位置,所以需要通过步进偏移的方式循环执行regexec才能把字符串中所有满足条件的匹配找出来, 每一次匹配的起始偏移是一次匹配到的字符串结束偏移...做这个封装对于我的现实意义是,最近工作的一个项目运行在嵌入式平台上,设备提供的SDK中有GNU regex库,但是是非常老的版本,只有4个函数regcomp,regerror,regexec,regfree...regex库,windows下编译上面的代码所需要的GNU regex library请参见我另一篇博客 《MSVC下使用gnu regex(正则表达式C语言接口regex.h)》 上面的完整的可编译代码以及

2.2K31

Bash中,双方括号]比单方括号更受推荐吗

单词分割通配符展开: [[ ]] 内部,变量扩展不会发生单词分割(根据空格或其它 IFS 字符将字符串拆分成单词)和文件名扩展(通配符展开)。...= 操作符进行模式匹配,以及使用 =~ 进行正则表达式匹配(使用 POSIXregcomp regexec 接口),比如 [[ hello == hell? ]],结果为真。...逻辑运算符:使用 [[ ]],你可以同一对括号内使用 && || 进行逻辑运算。...安全的条件表达式:由于 [ ] 实际是 test 命令的别名,某些表达式可能会意外地作为文件测试操作。 [[ ]] 中,这种混淆的可能性较小。...总之,尽管 [[ ]] 不遵守 POSIX 标准,因此 Bash 之外的环境中可移植性较差,但它确实为 Bash 脚本中的条件表达式提供了一个更强大的功能集。

9110

glibglibc_libc.so.6 version GLIBC_2.14

libc 是 Linux 下的 ANSI C 函数库;glibc 是 Linux 下的 GUN C 函数库。 ANSI C GNU C 有什么区别呢?...其实,glib glibc 基本没有太大联系,可能唯一的共同点就是,其都是 C 编程需要调用的库而已。 glib 是 Gtk+ 库 Gnome 的基础。...是一个综合用途的实用的轻量级的C程序库,它提供C语言的常用的数据结构的定义、相关的处理函数,有趣而实用的宏,可移植的封装一些运行时机能,如事件循环、线程、动态调用、对象系统等的API。...【其他说法】 libc 实际是一个泛指。凡是符合实现了 C 标准规定的内容,都是一种 libc 。 glibc 是 GNU 组织对 libc 的一种实现。它是 unix/linux 的根基之一。...【yasi】 libc, glibc一个层次,都是C的标准实现库,是操作系统级别的基石之一。 glib是用C写的一些utilities,即C的工具库,libc/glibc没有关系。

1.6K50

Rust生态安全漏洞总结系列 Part 4 | 请用 time 代替 chrono

---- 问题 本月 Reddit Rust 频道有人发布了一个帖子,询问Chrono 库是否还有人在维护。...Chrono 遇到的安全问题在 rustsec.org : RUSTSEC-2020-0159[3] 有描述, 大概内容是: Chrono 调用 libc 的 localtime_r,用于将时间转换为本地时间...而 libc 实现库中大多数都是直接调用 getenv 而 setenv getenv libc 中都不是线程安全的 为了确保 setenv 的健全性,Rust 的 libstd 为其添加了一个锁...这里面也涉及 Rust 中 std::env 的相关安全问题。目前当你并发环境下使用 setenv会存在数据竞争的问题,建议使用 互斥锁来处理,但只能防止 std::env。.../15475) 但是,直接调用 libc 的 setenv getenv 是线程安全的。

1.1K30

交叉编译环境的安装

什么是交叉编译 我们Linux中使用自带的gccg++编译器进行编译的程序是针对X86架构的。而我们开发板大多都是ARM或者其他架构的开发板,我们就需要编译出针对其他架构的程序。...其实就是我们的PC(X86)编译出其他平台上的代码,就称它为交叉编译。 想编译出在其它平台上可执行的程序,就需要使用不同的编译器,因为不同的编译器有不同的指令集等。...linux_tools$ ls gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi zh@zh-lpc:~/soft/linux_tools$ 3、测试是否可以运行...线程模型:posix gcc 版本 4.9.4 (Linaro GCC 4.9-2017.01) zh@zh-lpc:~/soft/linux_tools/gcc-linaro-4.9.4-2017.01...线程模型:posix gcc 版本 4.9.4 (Linaro GCC 4.9-2017.01) zh@zh-lpc:~$ 那么配置其他版本的也是如此。

2.1K10

LinuxThreadsNPTL

由于 NPTL 没有使用管理线程,因此其线程模型 NUMA SMP 系统具有更好的可伸缩性同步机制。 使用 NPTL 线程库与新内核实现,就可以避免使用信号来对线程进行同步了。...GNU_LIBPTHREAD_VERSION 宏     大部分现代 Linux 发行版都预装了 LinuxThreads NPTL,因此它们提供了一种机制来二者之间进行切换。...要查看您的系统正在使用的是哪个线程库,请运行下面的命令: $ getconf GNU_LIBPTHREAD_VERSION 这会产生类似于下面的输出结果: NPTL 0.34 或者: linuxthreads...您应该记住,使用 LinuxThreads 构建库时,需要使用 -D_REENTRANT 编译时标志。这使得库线程安全的。    ...我曾经看到过最近的 Red Hat 内核出现过这样的问题:一个简单线程单处理器的机器运行良好,但在 SMP 机器却挂起了。

70330

WASI|将WebAssembly带到浏览器之外

作者:Marco Fioretti WebAssembly(Wasm)[1]是一种二进制软件格式,所有浏览器都可以在任何操作系统(OS)直接、安全地[2]以接近原生的速度运行。...为了安全可移植,软件代码至少需要: 保证用户程序只能做他们实际有权做的事情,并且只做不会给其他程序或用户造成问题 声明应用这些保证的独立于平台的标准方法 传统,这些服务是由每种语言的“系统调用”...当这些库遵循像POSIX[4]这样的标准时,任何编译器都可以自动将它们与源代码组合在一起,从而生成一个可以某些操作系统处理器组合上运行的二进制文件。...然而,这样的工作将非常复杂,而且许多情况下(例如在物联网设备),最重要的是根本没有必要,如果不是不可能的话。...: https://www.gnu.org/software/libc/manual/html_node/POSIX.html#POSIX [5] WebAssembly System interface

1.7K30

posix_spawn() 函数窥探漏洞逃逸

posix_spawn() 函数是用来Linux创建子进程的,头文件是 #include ,语法如下: #include int posix_spawn(pid_t...argv envp 参数指定在子进程中执行的程序的参数列表环境 详细文档可以通过 man posix_spawn 查看相关文档: ? 既然我们知道了这些参数,我们该如何利用这个呢?...我们可以通过 posix_spawn 这个函数,创建一个子进程,这个子进程可以是系统的默认的命令(进程实质就是一个程序嘛),这个子进程如果调用的是当前的 shell,我们就可以直接利用这个 shell...由于 posix_spawn 函数是 C 语言中 system.c 创建线程默认调用的功能模块。...C 源码官方下载:http://ftp.gnu.org/gnu/libc/,定义 system 的 c 文件 glibc/sysdeps/posix/system.c,当然我们也可以 https:/

1.5K00

GDB调试core文件样例(如何定位Segment fault)

core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储一个core文件中, 叫core dump....2 多线程程序使用了线程安全的函数。 3 多线程读写的数据未加锁保护。...这是因为如果这段内存的开始地址不是按照这种结构或类型对齐的,那么访问它时就很容易因为bus error而core dump. 5 堆栈溢出.不要使用大的局部变量(因为局部变量都分配在栈),这样容易造成堆栈溢出...,破坏系统的栈堆结构,导致出现莫名其妙的错误。...二 配置操作系统使其产生core文件 首先通过ulimit命令查看一下系统是否配置支持了dump core的功能。

3.8K20

Ubuntu安装gcc4.1.2

安装之前,系统中必须要有cc或者gcc等编译器,并且是可用的,或者用环境变量CC指定系统的编译器。如果系统没有编译器,不能安装源 代码形式的GCC 4.1.2。...本文介绍的是以源代码形式提供的GCC软 件包的安装过程,软件包本身其安装过程同样适用于其它LinuxUnix系统。...本文中采用这个方案安装GCC 4.1.2,并且安装完成后,仍然能够使用原来低版本的GCC编译器,即一个系统可以同时存在并使用多个版本的GCC编译器 1、下载  GCC网站上(http://gcc.gnu.org...$ sudo apt-get install libc6-dev libgmp-dev libmpfr-dev texinfo 4、为头文件以及所需库添加链接 添加如下链接, 这取决于你的 Ubuntu...MAKEINFO=makeinfo 6、 安装gcc $ make install 6、检验是否成功 $ cd /usr/local/bin $ ll *gcc* 看到类似以下几个文件, 安装就完成了

75940

Linux多进程线程的一次gdb调试实例

Linux C/C++开发中gdb进行多进程线程的调试一直比较麻烦,CSDN看到高科的一篇文章《gdb调试多进程线程命令》比较有启发,这里就自己重新整理并做了一个GDB多进程/线程的调试实践...gdb7以上的版本(gdb --version)支持多进程调试,只需要设置好follow-fork-mode(fork追踪模式)以及detach-on-fork(指示GDBfork之后是否断开某个进程的调试...(gdb) 2 演示代码 下面这段代码的主要流程就是main函数中fork创建一个子进程,然后父进程中又创建一个线程,接着就使用gdb进行调试(block子进程)。...Threads为1(共享使用该信号描述符的线程数,POSIX线程序应用程序中,线程组中的所有线程使用同一个信号描述符)。...50行设置断点继续调试主进程(使父进程产生线程),其中父进程线程到底是谁先执行是由内核调度控制的。

15410

GCC、ARM-LINUX-GCC、ARM-ELF-GCC浅析

看到源码中的printf函数没有,这个函数GCC中是以库函数的形式存在,这个库函数glibc库中,stdio.h头文件中被声明。...GCC中的一般工具通常都是通过命令行上调用命令(如gcc)来执行的。使用交叉编译的情况下,这些工具将根据它编译的目标而命名。...glibc-2.2.4.tar.gz,libc是很多用户层应用都要用到的库,kernelbootloader不需要这个库的支持,这个库主体部分封装在这个压缩包内。...glibc-linuxthreads-2.2.4.tar.gz,这是Libc用于支持Posix线程而单独发布的一个压缩包。...arm-linux-gcc使用GNU的Glibc,而arm-elf-gcc一般使用 uClibc/uC-libc或者使用REDHAT专门为嵌入式系统的开发的C库newlib。

6.5K10

Android跨进程通信IPC之2——Bionic

2、谷歌BSD的C库的基础加入了一些Linux特性从而生成了Bionic。Bionic名字的来源就是BSDLinux的混合。而且不受限制的开源方式,所以现代的商业公司中比较受欢迎。...4、执行查询时,使用一个合适的随机ID(而不是每次+1),以提升安全性。 5、执行查询时,给本地客户socket绑定一个随机端口号,以提高安全性。...6、删除了一些源代码,这些源代码会造成了很多线程安全的问题 (四)、二进制兼容性 由于Bionic不与GNU C库、ucLibc,或者任何已知的Linux C相兼容。...在这个点TLS线程的关系有点类似栈变量函数的关系。栈变量函数退出时会消失,TLS也会在线程结束时释放。...(Mutex)函数 Linux线程提供了一组函数用于线程间的互斥访问,Android中的Mutex类实质是对Linux互斥函数的封装,互斥量可以理解为一把锁,进入某个保护区域前要先检查是否已经上锁了

1.5K50

【Linux】accept(2) - Linux man page

新的文件描述符的正常读取或写入可以暗示确认,关闭新的套接字可以暗示拒绝。目前Linux只有DECNet具有这些语义。...,accept()返回的新套接字 不会 继承监听套接字的文件状态标志,如O_NONBLOCKO_ASYNC。...被传递或select(2)或poll(2) 返回一个可读事件后,可能并不总是有连接在等待,因为accept()被调用之前,连接可能已经被异步网络错误或其他线程移除。...Quoting Linus Torvalds:accept()的第三个参数最初被声明为 int * (libc4libc5以及许多其他系统,如4.x BSD、SunOS 4、SGI也是如此);POSIX...POSIX最初确实使它成为一个size_t,我(希望还有其他人,但显然不是很多)确实非常大声地向他们抱怨。把它做成size_t是完全错误的,因为size_t很少64位架构的 "int "一样大。

21230
领券