linux系统编程
文章平均质量分 94
贪睡的蜗牛
记性不好,那就多写博客。。。。
展开
-
Linux系统编程
gdb发现逻辑错误,gcc发现语法错误1、基本用法调试前准备 加上-g得到调试表 例如gcc -g tst.c -o tst开始调试gdb ./a.outlist: list 1 列出源码。根据源码指定 行号设置断点。b: b 20 在20行位置设置断点。run/r: 运行程序n/next: 下一条指令(遇到函数会越过函数)原创 2022-09-07 17:05:57 · 3446 阅读 · 0 评论 -
linux系统编程7-锁、信号量、线程同步
由于互斥锁的粒度比较大,如果我们希望在多个线程间对某一对象的部分数据进行共享,使用互斥锁是没有办法实现的,只能将整个数据对象锁住。如直接使用mutex,除了生产者、消费者之间要竞争互斥量以外,消费者之间也需要竞争互斥量,但如果汇聚(链表)中没有数据,消费者之间竞争互斥锁是无意义的。比如生产者和消费者模型,消费者先对容器加锁,发现没有食物了,然后就会阻塞,程序就会停到当前位置,释放所占有的锁,然后让生产者拿着这个锁去放食物,让生产者发出信号把自己唤醒。资源还是共享的,线程间也还是竞争的,sem_t sem;原创 2022-09-07 16:43:57 · 773 阅读 · 0 评论 -
linux系统编程6-守护进程、线程
获取线程id。线程id是在进程地址空间内部,用来标识线程身份的id号。返回值:本线程id检查出错返回: 线程中。创建子线程。参 1 :传出参数,表新创建的子线程 id参 2 :线程属性。传 NULL 表使用默认属性。参 3 :子线程回调函数。创建成功,ptherad_create函数返回时,该函数会被自动调用。参 4 :参 3 的参数。没有的话,传 NULL 返回值:成功: 0 失败:errno循环创建N个子线程: for (i = 0;i < 5;原创 2022-09-06 16:04:26 · 798 阅读 · 0 评论 -
linux系统编程5-信号
这里要有信号屏蔽,比如捕捉到一个信号,进入回调函数处理过程,假设回调函数特别长,这时候正好又来了一个信号,由于信号比程序执行优先级高那么前面那个回调函数就没法再执行。Linux内核的进程控制块 PCB是一个结构体,task_struct,除了包含进程 id,状态,工作目录,用户 id,组id,文件描述符表,还包含了信号相关的信息,主要指阻塞信号集和未决信号集。将某些信号加入集合,对他们设置屏蔽,当屏蔽x信号后,再收到该信号,该信号的处理将推后(解除屏蔽后) kill -9无法屏蔽。设置定时器(闹钟)。原创 2022-09-05 18:32:25 · 363 阅读 · 0 评论 -
linux系统编程3—文件存储函数
如果进程运行过程中突然终止了,而临时文件还没来的及删除,那么就会遗留下很多没用的临时文件,unlink提供了解决这个问题的一种方法。当进程结束运行时,所有该进程打开的文件会被关闭,申请的内存空间会被释放。清除文件时,如果文件的硬链接数到0了,没有dentry对应,但该文件仍不会马上被释放。删除一个硬链接只是删除引用innode的链接,当删除所有的硬链接后,innode的引用值为0,但并不会删除磁盘上的内容,如果重建innode数据还会恢复。读取符号链接文件本身的内容,得到链接所指向的文件名。......原创 2022-08-28 19:32:21 · 575 阅读 · 0 评论 -
linux系统编程2—系统调用/文件I/O
当进程调用一个阻塞的系统函数时,该进程被置于睡眠(Sleep)状态,这时内核调度其它进程运行,直到该进程等待的事件发生了(比如网络上接收到数据包,或者调用sleep指定的睡眠时间到了)它才有可能继续运行。2、从终端设备或网络读写可能会发生阻塞,如果从终端输入的数据没有换行符,调用read读终端设备就会阻塞,如果网络上没有接收到数据包,调用read从网络读就会阻塞,至于会阻塞多长时间也是不确定的,如果一直没有数据到达就一直阻塞在那里。bss段存储没有初值的全局变量或默认为0的全局变量,属于静态内存分配。...原创 2022-08-27 18:09:23 · 471 阅读 · 0 评论 -
linux系统编程1-gdb调试工具和makefile项目管理
gdb发现逻辑错误,gcc发现语法错误1、基本用法调试前准备 加上-g得到调试表 例如gcc -g tst.c -o tst开始调试gdb ./a.outlist: list 1 列出源码。根据源码指定 行号设置断点。b: b 20 在20行位置设置断点。run/r: 运行程序n/next: 下一条指令(遇到函数会越过函数)...原创 2022-08-27 20:09:53 · 141 阅读 · 0 评论