![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux编程
文章平均质量分 77
liuyuan185442111
主要为了增强记忆和方便查询,评论如果没有及时回复,还请见谅
展开
-
fnmatch和glob模式匹配
fnmatch、glob、wordexp都是GNU C Library第10章模式匹配中的一部分,该章还包括正则表达式匹配,详细参见。有时候需要一些简单的模式匹配,正则有点杀鸡用牛刀的意思,可以考虑The GNU C Library提供的fnmatch函数。开头的字符串,除非显式指定,如果同时设置了FNM_PATHNAME,上述特殊处理还适用于字符串中。如果匹配成功返回0,如果没有匹配返回FNM_NOMATCH,如果有错误返回其他非零值。):匹配被中括号包围的任一字符,括号间不可为空,例如。原创 2023-01-15 22:03:34 · 508 阅读 · 0 评论 -
关于pthread_rwlock_t读写锁产生死锁的情况
此时pthread_rwlock_rdlock和pthread_rwlock_wrlock会返回EDEADLK,表示产生了死锁。这段代码看着可能很傻,但如果将写锁和读锁放到两个函数里,一个函数调用另一个函数,就比较容易发生了。所以加锁的时候要判断下返回值,如果是EDEADLK,可以直接终止程序。一个线程持有着(读或者写)锁,又去加(该锁的)写锁,可能会死锁。一个线程持有着写锁,又去加(该锁的)读锁,可能会死锁。原创 2022-12-30 00:08:06 · 1083 阅读 · 0 评论 -
shell脚本调试方法
-x”选项使shell在执行脚本的过程中把它实际执行的每一个命令显示出来,并且在行首显示一个"+"号, "+"号后面显示的是经过了变量替换之后的命令行的内容,有助于分析实际执行的是什么命令。其中signal是要捕获的信号,command是捕获到指定的信号之后,所要执行的命令,可以是一条或多条合法的shell语句,也可以是一个函数名。在上面的结果中,前面有“+”号的行是shell脚本实际执行的命令,前面有“++”号的行是执行trap机制中指定的命令,其它的行则是输出信息。PS1是主提示符变量,默认值。原创 2021-04-10 10:35:44 · 1495 阅读 · 0 评论 -
关于_REENTRANT宏
项目里定义了_REENTRANT宏,将其作为是否开启多线程的标志,一位老同志还告诉我,如果不定义_REENTRANT,pthread可能不是线程安全的。这种说法有点不符合直觉,所以查了下。Feature Test Macros:Macro: _REENTRANTMacro: _THREAD_SAFEThese macros are obsolete. They have the same effect as defining _POSIX_C_SOURCE with the value 1995原创 2020-07-04 11:32:11 · 447 阅读 · 1 评论 -
makefile简明使用方法
零碎命令前面加一个减号的意思是,该命令如果出错也不停止命令前面加@的意思是,这个命令将不显示出来makefile中的变量其实就是C语言中的宏:=定义的变量不能使用后面定义的变量=定义的变量可以使用后面的变量+=是追加例如,a=5$(b)c:=5$(b)b=Mb是5M,c是5VPATH变量make会在当前目录找不到依赖文件和目标文件的情况下,到VPATH指定的目录中取寻找...原创 2019-09-10 11:45:10 · 214 阅读 · 0 评论 -
reactor io的一种实现
下面是一个reactor模式下的io简单类图:reactor::run是一个死循环,单独占用一个线程,循环体内容是:调用load_event(),加载自上次以来变化的事件,函数会调用_dispatch的add_event()和del_event(),将要监听的fd和该fd上关心的事件告知demultiplexer;调用_dispatch->dispatch()进入wait状态,等待事...原创 2019-07-14 18:05:11 · 175 阅读 · 0 评论 -
通过UNIX域套接字传送文件描述符
UNIX域套接字用于在同一台机器上运行的进程之间的通信。UNIX域套接字提供流和数据包两种接口。UNIX域套接字是套接字和管道之间的混合物。为了创建一对非命名的、相互连接的UNIX域套接字,可以使用socketpair函数。#include <sys/socket.h>int socketpair(int domain, int type, int protocol, int so...原创 2019-03-02 15:09:28 · 979 阅读 · 0 评论 -
线程同步与进程间通信
线程之间天然是共享数据的,所以重点讨论线程同步;进程之间进程资源是隔离的,所以重点讨论进程间通信。当然有些资源是多进程共享的,所以进程间也需要考虑同步。线程同步互斥量 pthread_mutex_t读写锁 pthread_rwlock_t条件变量 pthread_cond_t条件变量让线程等待特定条件的发生,条件本身是由互斥量保护的。有两个函数可以用于通知线程条件已经满足,pthrea...原创 2018-12-24 14:53:19 · 174 阅读 · 0 评论 -
最好使用sigaction函数替代signal函数
APUE 习题15.15,一个XSI共享存储的测试程序:#include &lt;fcntl.h&gt;#include &lt;stdio.h&gt;#include &lt;assert.h&gt;#include &lt;unistd.h&gt;#include &lt;sys/shm.h&gt;#include &原创 2018-12-23 21:48:27 · 856 阅读 · 0 评论 -
getopt和getopt_long
getopt#include <getopt.h> // man里说是#include <unistd.h>int getopt(int argc, char * const argv[], const char *optstring);extern char *optarg;extern int optind, opterr, optopt;如果选项成功找到,...原创 2018-10-03 17:30:22 · 258 阅读 · 0 评论 -
进程关系
进程组进程组是一个或多个进程的集合,通常与作业相关联,每个进程组有一个唯一的进程组ID。 每个进程组都可以有一个组长进程,组长的pid等于进程组ID。组长进程可以提前终止,进程组中最后一个进程终止或转移到另一个进程组时,该进程组消失。 进程可以通过调用getpgrp或getpgid获得该进程的进程组ID。 进程可以通过调用setpgid加入一个现有的组或创建一个新进程组。 一个进程只能...原创 2018-05-21 15:03:56 · 433 阅读 · 0 评论 -
Linux下文件和进程的相关用户ID
在Linux中普通用户可以用passwd来修改自己的密码,可以用crontab来添加定时任务,但是它们的属性:-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /bin/passwd-rwsr-xr-x 1 root root 57552 Mar 31 2016 /bin/crontab(各字段分别为:访问权限,文件硬链接数或目录子目录数,拥有者,拥有...原创 2017-10-01 12:07:17 · 475 阅读 · 0 评论