linux
暴躁的野生猿
请加入裙,欢迎同行一起学习交流,1零251②7672。百度搜索【CSDN 暴躁的野生猿】也可搜到群号码
展开
-
linux查看函数的回溯函数
所谓回溯,就是查看谁在调用某个函数。最直接的方法就是用sourceInsight,右击某个函数->选择jump to caller,这种方法有时候会产生很多调用者,看不出到底是谁在调用。另一种方法就是运行时打印,linux提供了回溯的功能,在想要回溯的函数中,加入代码:dump_stack();运行时在控制台就会看到打印,依次打印出了谁在调用它,一直回溯到最上层的应用层函数...原创 2018-05-28 20:37:14 · 778 阅读 · 0 评论 -
linux进程通信之命名管道
命名管道本质上是个特殊的文件,可以通过shell的mkfifo命令,或者程序的mkfifo( ) 函数来创建这种特殊文件,相关信息可以分别通过shell中的命令来查看:man 1 mkfifo 和 man 3 mkfifoshell命令:man 7 fifo指出:(1)多个进程通过fifo交换数据时,数据并没有真的被写入文件系统,因此文件系统中的fifo文件里面什么内容都没有。(2)只有fifo...翻译 2018-07-02 23:51:39 · 255 阅读 · 0 评论 -
linux进程通信之信号灯(信号量,semaphore)
信号灯通信,和一般意义的通信不大一样,通信一般是用来收发数据,而信号灯却是用来控制多进程访问共享资源的,利用这一功能,信号量也就可以用做进程同步。相关API:1、 int semget(key_t key, int nsems, int semflg);//创建或者打开一个信号灯集(注意:是信号灯集,不是信号灯!) 形参key、semflg不再赘述,和我的另一篇文章《linux进程通信之消息...翻译 2018-07-03 00:27:59 · 5949 阅读 · 2 评论 -
linux多线程相关的API-(3)--线程取消cancel与清理push/pop
1、pthread_cancel(pthread_t tid);功能描述:向线程号为tid的线程发送一个取消运行的请求。线程tid是不是真的会被取消?何时会被取消?这两个问题依赖于本线程的两个控制属性:是否取消依赖于一个状态使能标志stat、何时取消依赖于一个类型标志type。pthread_setcancelstate函数可以设置状态为使能enable或者不使能disable(一个线程创...翻译 2018-07-10 14:35:25 · 374 阅读 · 0 评论 -
inux多线程相关的API-(3)--线程的私有数据
私有数据的作用是,创建一个内存区域,只有本线程能够访问,其他线程无法访问。这一功能看起来很简单,没必要使用库函数来做,只要程序员自己集中注意力,分配几块内存,给不同的线程使用就行了,但是,人类不能保证这一点,稍有疏忽,可能会踩到别的线程的内存,所以,实现这一功能还是使用库函数比较可靠。参考:《linux线程私有数据详解》、《Linux多线程基础学习(八)私有数据》1、int pthread_key...翻译 2018-07-10 17:28:33 · 173 阅读 · 0 评论 -
linux进程通信之共享内存
share memory共享内存1、用ftok来生成一个key,参考另一篇博文:消息队列2、int shmget(key_t key, size_t size, int shmflg);//创建/获取共享内存举例: int shmid = shmget(key, 1000, IPC_CREAT | 0666);@key一般来自于ftok函数,@size,要申请的内存的大小,注意,该值会被圆整为内存...翻译 2018-07-05 10:21:39 · 2639 阅读 · 0 评论 -
linux的退出函数exit( )、_exit( )
1、void exit(int status);该函数的功能是,使调用本函数的进程正常终止,然后把形参的值status&0377(八进制)返回给父进程,父进程可以通过wait“函数族”来获取这个返回值。所有通过atexit( )和 on_exit( ) 注册的函数,会被挂在一个链表上,后注册的函数被挂在链表的最前面,当执行本函数exit()时,该链表上的函数会从头一个个的执行一遍(...翻译 2018-07-05 15:16:26 · 9430 阅读 · 0 评论 -
linux进程/进程组的一些概念,和相关API,setpgid等
1、 int setpgid(pid_t pid, pid_t pgid);功能1:设置进程pid所在的进程组的ID为pgid,如果pid的实参为0,setpgid(0, 5)等价于setpgid(getpid(), 5),其中getpid()的作用是获取本进程的pid。功能2:把进程pid移动到别的进程组(这一功能的一个常见例子就是:shell创建管道线时),原进程组和目标进程组必须处于同一个会...翻译 2018-07-05 15:54:18 · 2353 阅读 · 0 评论 -
linux信号量semaphore的几种使用方法(semop函数的特性)
以下提到的几种应用方式,下面都有示例代码。注意:有个点容易遗忘的:当semop的实参sops设置>0的操作时,一般要给这个op动作添加SEM_UNDO标志,详情可参考另一篇博文:linux线程通信之信号量。应用情景一:用信号量打造一个二值信号量(互斥量),也即:任何时刻只允许一个线程访问共享资源。P操作用于占用资源,V操作代表释放资源。使用信号量,关键是要知道semop函数的特性...原创 2018-07-06 13:10:35 · 7223 阅读 · 1 评论 -
linux线程同步之互斥锁mutex
互斥锁的意义和使用方法较为简单,有点类似于原子操作。先把常用的几个线程互斥锁相关的api列出,再一个个详细介绍:pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict at...翻译 2018-07-07 23:23:11 · 685 阅读 · 0 评论 -
eclipse新建工程、添加编译选项、生成执行文件
一、新建工程file->new->C project,弹出工程位置选择框,取消use default location“”勾选,就可以自定义工程的存放位置二、添加链接库例如编译多线程程序时,gcc需要-lpthread选项,这个功能的配置位于:project->properties->C/C++ build->settings,右侧继续选择GCC CL...原创 2018-07-27 14:01:29 · 6167 阅读 · 0 评论 -
linux亲缘进程通信之无名管道
无名管道通信,只能用于父子进程、兄弟进程等具有亲缘关系的进程之间通信。原因也很简单,无名管道文件被放置在内存中虚拟的文件系统中,只有fork/vfork分裂出的亲缘进程,才能继承到无名管道描述符(文件描述符)。重要的系统调用:pipe( )和pipe2( )int pipe2(int pipefd[2], int flags);int pipe(int pipefd[2]);...原创 2018-07-02 21:42:14 · 592 阅读 · 0 评论 -
shell中的单层大/中/小括号、双层大中小括号、命令替换等
参考:https://www.cnblogs.com/itxdm/p/something_of_shellscirpt.htmlhttps://www.cnblogs.com/hanggegege/p/5928870.htmlhttps://blog.csdn.net/ztf312/article/details/52317571技巧小结:1、单小括号( ):shell命令及输出,左右不留空格,一...转载 2018-06-27 00:17:44 · 2911 阅读 · 0 评论 -
linux进程通信之消息队列:msg queue
shell 相关命令:ipcs -q -s -m#查看已建立的队列、信号量(semaphore,又译信号灯)、共享内存ipcrm -q 123 #删除id=123的消息队列 一、接口函数:(下述内容基本上翻译的官方man手册,有一些我理解不了的句子,就直接把原文贴上来了)1、key_t ftok(const char *pathname, int proj_id),由文件路径(文...翻译 2018-07-02 00:25:53 · 1865 阅读 · 0 评论 -
网络协议架构
几个关键词:IP(Internet Protocol,网络之间互连的协议)TCP(Transmission Control Protocol ,传输控制协议)UDP(User Datagram Protocol, 中文名是用户数据报协议)...原创 2018-06-13 21:41:31 · 580 阅读 · 0 评论 -
linux用户态、内核态的切换,SWI指令的理解
内核态的代码可以直接操作寄存器,把自己切向用户态,但是用户态想切换进入内核态,就需要费一番周折了总体思路是这样的:异常服务函数和中断服务函数都是运行在内核态的,在普通模式下,用户如果想干一些特权功能,通过修改寄存器直接进入内核态是不可能的,不妨通过异常服务函数来做,只要程序员们提前约定好协议,把想做的事情放到异常服务函数中就行了。对于各种各样的特权操作代码(也即,各种系统调用system_call...原创 2018-06-14 11:34:44 · 1256 阅读 · 0 评论 -
makefile的写法
从一个简单的makefile开始:CC = gccEX = -lpthread #扩展命令-lpthread用于编译多线程源码, 去掉l也可以:EX = -pthread obj_file = private_data.o #多个文件之间用空格隔开exe_File = private_exe$(exe_File): $(obj_file) $(CC) -o $@ $^ $(...原创 2018-06-22 14:01:54 · 183 阅读 · 0 评论 -
linux多线程相关的API-(1)--创建/退出/加入/分离等
注意:多线程相关的代码,在编译时必须加-lpthread或者-pthread选项,例如:gcc thread_test.c -o test_exe -pthread 一、创建线程:pthread_create原型:int pthread_create(pthread_t *tid, const pthread_attr_t *att...原创 2018-06-22 15:28:21 · 371 阅读 · 0 评论 -
linux c 线程间同步(通信)的几种方法--互斥锁,条件变量,信号量,读写锁
转载自:https://blog.csdn.net/vertor11/article/details/55657619Linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量、信号量和读写锁。 下面是思维导图: 一、互斥锁(mutex) 锁机制是同一时刻只允许一个线程执行一个关键部分的代码。1 . 初始化锁int pthread_mutex_init(pthread_mutex_t...转载 2018-06-22 16:57:45 · 266 阅读 · 0 评论 -
linux多线程相关的API-(2)--线程属性
参考:https://blog.csdn.net/pbymw8iwm/article/details/6721038线程属性结构如下:typedef struct{ int detachstate; 线程的分离状态 int schedpolicy; ...原创 2018-06-23 12:04:03 · 206 阅读 · 0 评论 -
shell中输入输出重定向,>、>>、<、<<、>/dev/null、2>&1、<<end、<<EOF等
转载来源,感谢原作者:https://www.jb51.net/article/106373.htm前言相信大家经常能在shell脚本中发现>/dev/null 2>&1这样的语句。以前的我并没有去深入地理解这段命令的作用,照搬照用,直到上周我将这段命令不小心写成了2>&1 >/dev/null,出了一点小问题之后,我才开始去了解这段命令背后的“玄机”。sh...转载 2018-06-26 09:20:55 · 18329 阅读 · 6 评论 -
shell中的单引号、双引号、反引号
参考:https://blog.csdn.net/iamlaosong/article/details/54728393http://www.runoob.com/linux/linux-shell-variable.html单引号括起来的内容,全部被识别为普通字符串;双引号括起来的内容,除了$(美元符号)、\(反斜杠)、’(单引号)、”(双引号),这四个符号以外,其他都被识别为普通字符串;反引号...原创 2018-06-26 17:39:23 · 542 阅读 · 0 评论 -
git克隆速度太慢的解决方法
https://blog.csdn.net/hzwwpgmwy/article/details/79043251第一步:直接把网址对应的IP放进hosts文件,这样就省去了DNS解析的时间,步骤如下:1、查找域名对应的ip地址,并修改hosts文件nslookup github.global.ssl.fastly.Netnslookup github.com ...转载 2019-02-23 15:08:11 · 9610 阅读 · 0 评论