Linux
文章平均质量分 73
liuge
我们的征途是星辰大海
展开
-
getopt_long解析parser
getopt_long函数分析1. man getopt_long #include <unistd.h> int getopt(int argc, char * const argv[], const char *optstring); extern char *optarg; extern int optind, opterr, optopt; #include <geto原创 2021-12-19 16:44:40 · 529 阅读 · 0 评论 -
linux开机自启动脚本以及update-rc.d命令解析
linux有很多种自启动方式,这里只是简单记录下update-rc.d的自启动方式update-rc.d的介绍update-rc.d命令用于安装或移除System-V风格的初始化脚本连接。脚本是存放在 /etc/init.d/目录下的,我们可以直接在/etc/init.d/目录下创建执行脚本,然后在rcN.d或者rcS.d中创建软链接,系统启动时会从rcS-rc0…rc6顺序启动文件夹里的启动脚本在/etc/目录下存在如下八个文件夹,7个rcN和一个rcSliuge@liuge-VirtualBox原创 2021-11-30 14:24:36 · 5956 阅读 · 3 评论 -
C++——并发基础tid、pid
对于linux来讲,线程即是进程通过pthread_self获取的为线程ID,为posix进程内部区分线程的idgetpid获取的是当前进程的pid通过系统调用syscall(SYS_gettid)获取的是tid,对于内核来讲就是该进程的pid对于只有一个线程的进程来说,pid就是tid对于有多个线程的进程来说,tid不等于pid,也不等于pthread_self获取的线程id#include <iostream>//#define _GNU_SOURCE /*原创 2020-11-20 16:02:44 · 1285 阅读 · 0 评论 -
APUE——IPC_管道,消息队列
管道基础知识原创 2020-07-21 23:22:43 · 391 阅读 · 0 评论 -
APUE——文件与文件IO
简析文件系统与文件io原创 2020-07-15 15:45:11 · 290 阅读 · 0 评论 -
UNP——TCP回射服务器
server#include <stdio.h>#include <stdlib.h>#include "tcpser.h"#include <arpa/inet.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/time.h>#include <sys/select.h>#inclu原创 2020-07-01 17:57:06 · 290 阅读 · 0 评论 -
UNP——socket套接字分析以及IPC_UDS
socket接收发送的流程,以及相关函数分析原创 2020-06-10 23:28:40 · 1598 阅读 · 0 评论 -
APUE——文件系统的VFS以及相关结构体简要分析
写了点关于linux文件系统相关的分析,比较基础原创 2020-06-05 17:49:14 · 405 阅读 · 1 评论 -
C的字节对齐和位域操作
遇到位域操作问题,研究了下原创 2020-06-01 18:00:25 · 1165 阅读 · 0 评论 -
APUE——标准IO相关
写点标准IO的总结原创 2020-05-28 18:42:34 · 252 阅读 · 0 评论 -
APUE——pthread_cond_wait深度分析
写了点关于pthread_cond_wait和signal的心得原创 2020-05-25 13:22:18 · 1550 阅读 · 2 评论 -
APUE——信号基础以及信号的响应
1.信号基础1.1 信号函数#include <signal.h>void (*signal(int signo, void (*func)(int)))(int); 这是可靠写法void (* signal( int signo, void (*func)(int) ) )(int);函数名 :signal函数参数 :int signo, void (*func)(int)返回值类型:void (*)(int);信号的忽略: 信号忽略的核心是将mas原创 2020-05-21 16:28:22 · 391 阅读 · 1 评论 -
APUE——信号与线程
APUE原文Linux 多线程应用中如何编写安全的信号处理函数LinuxThread与NPTL多线程下慎用sigwaitlinux中使用信号–sigwait()和pthread_sigmask()1. 信号与线程三个函数利用sigwait,sigwaitinfo,pthread_sigmask函数可以解决如下问题以线程同步的方式,处理异步信号在指定的线程中处理信号信号与线程主要涉及如下三个函数:#include <signal.h>int sigwait(const s原创 2020-05-21 09:58:46 · 370 阅读 · 1 评论 -
APUE——线程取消
APUE原文线程取消链接1. 线程取消过程先描述一下取消一个线程的过程:其他线程通过调用pthread_cancel()函数,向目标线程发送取消请求(cancellation request)。取消请求发出后,根据目标线程的cancel state来决定取消请求是否会到达目标线程:pthread_setcancelstatea. 如果目标线程的cancel state是PTHREAD_CANCEL_ENABLE(默认),取消请求会到达目标线程。pthread_setcancelstat原创 2020-05-21 10:00:48 · 162 阅读 · 0 评论 -
APUE——线程私有数据
APUE链接线程私有数据链接1pthread_once链接1. 线程私有数据进程中的所有线程都可以访问进程的整个地址空间。除了使用寄存器以外,线程没有办法阻止其他线程访问它的数据,线程私有数据也不例外线程私有数据(也称线程特定数据)是存储和查询与某个线程相关的数据的一种机制。把这种数据称为线程私有数据或线程特定数据的原因是:希望每个线程可以独立地访问数据副本,而不需要担心与其他线程的同步访问问题。errno被重新定义为线程私有数据。这样,一个线程做了设置errno的操作并不会影响进程中其他线程的原创 2020-05-21 10:01:29 · 369 阅读 · 0 评论 -
APUE——线程控制之线程和fork
线程控制之线程和forkfork()函数与Linux中的多线程编程使用 Mutex 实现进程间同步fork子进程通过继承整个地址空间的副本,也从父进程那里继承了所有互斥量、读写锁和条件变量的状态。如果父进程包含多个线程,子进程在fork返回以后,如果紧接着不是马上调用exec的话,就需要清理锁状态。在子进程内部只存在一个线程,它是由父进程中调用fork的线程的副本构成的。如果父进程中的线程占有锁,子进程同样占有这些锁。问题是子进程并不包含占有锁的线程的副本,所以子进程没有办法知道它占有了哪些锁并原创 2020-05-21 10:02:06 · 185 阅读 · 0 评论 -
APUE——进程终止
abort 与return exit的关系进程终止linux进程控制函数–fork,exec,exit,wait,sleep1. 进程终止方式进程有下面5种正常终止方式:在main函数内执行return语句。这等效于调用exit。调用exit函数。此函数有ISO C定义,其操作包括调用各终止处理程序(终止处理程序在调用atexit函数时登记),然后关闭所有标准I/O流等。调用_exit或_Exit函数。ISO C定义_Exit,其目的是为进程提供一种无需运行终止处理程序或信号处理程原创 2020-05-21 10:02:24 · 187 阅读 · 0 评论 -
APUE——unix出错处理
1. errno原理当UNIX函数出错时(系统调用),常常会返回一个负值,而且整型变量errno通常被设置为含有附加信息的一个值。文件<errno.h>中定义了符合errno以及可以赋予它的各种常量,这些常量都以字符E开头。另外,UNIX系统手册第2部分的第1页intro(2)列出了所有这些出错常量。在Linux中,出错常量在errno(3)手册页中列出(可以使用命令man 3 errno查看)。如果没有出错,则其值不会被一个例程清除。因此,仅当函数的返回值指明出错时,才检验其值。任一原创 2020-05-21 10:05:24 · 184 阅读 · 1 评论 -
APUE——线程同步属性与递归锁
参考文档1参考文档2原创 2020-05-21 10:03:01 · 228 阅读 · 0 评论 -
Linux内核之——等待队列wait queue
前言等待队列1等待队列2调度器CPU调度如下图所示:等待队列其原理是:cpu会调度就绪队列,或者打断执行线程,运行就绪队列创建等待队列头和队列,使用wait event,当condition不满足时,当前线程进入等待队列通过将当前线程加入等待队列中,同时schedule调度走cpu执行别的线程,下次cpu便不会再调度当前线程了当wakeup后,将wait线程加入run que...原创 2020-05-21 10:12:48 · 4224 阅读 · 0 评论 -
APUE——线程创建与终止
#include <iostream>#include <vector>using namespace std;using input_tag=int;using random_tag=double;class tags{ typedef int* tags_intptr; typedef int tags_int; typedef...原创 2020-05-21 10:03:56 · 246 阅读 · 0 评论 -
APUE——system函数详细分析
相关链接信号屏蔽集的继承关系fork后,子进程继承了父进程的信号屏蔽集,但是由于是两个存储空间,所以更改子进程的信号屏蔽集,并不改变父进程的信号屏蔽集#include "apue.h"struct sigaction act;sigset_t old;void fun();//void funchild();pid_t pid;void pr_mask(const char *...原创 2020-05-21 10:04:45 · 666 阅读 · 0 评论 -
APUE——alarm与pause、sigsetjmp、siglongjmp、sigsuspend
1、alarm与pause每个进程只能有一个alarm,如果之前有个alarm,在本次alarm执行完毕的时候如果还没有结束,则本次alarm返回上次alarm剩余的值。如果本次alarm执行的结果为0,则取消原来的闹钟。SIGALARM的默认执行动作是终止进程,但是大多数闹钟会捕获该信号,如果要捕获该信号,应该在alarm执行前,注册信号处理函数!1.1 例子分析2、sig...原创 2020-05-21 10:05:52 · 302 阅读 · 0 评论 -
APUE——sigprocmask,sigaction
#include "apue.h"static void sig_quit();int main(){ sigset_t newmask,oldmask,pendingmask; if(signal(SIGQUIT,sig_quit)<0) printf("can't catch SIGQUIT"); sigemptyset(&n...原创 2020-05-21 10:06:03 · 233 阅读 · 0 评论 -
APUE——fork分析
1、fork现在P1用fork()函数为进程创建一个子进程P2,a. fork内核:复制P1的正文段,数据段,堆,栈这四个部分,注意是其内容相同。为这四个部分分配物理块,P2的:正文段->PI的正文段的物理块,其实就是不为P2分配正文段块,让P2的正文段指向P1的正文段块,数据段->P2自己的数据段块(为其分配对应的块),堆->P2自己的堆块,栈->P2自己的栈块。如下图所示:同...原创 2020-05-21 10:09:24 · 239 阅读 · 1 评论