- 博客(119)
- 收藏
- 关注
原创 FFMPEG音视频开发从零开始的导向
本人目前小白一枚,由于事先未涉及过音视频开发,故也是处在零开始阶段。首先,向音视频开发大神“雷神”雷博士致敬,一路走好,愿在天堂的你能够快乐!!!“雷神”对音视频开发的研究比较细致,较适合各个阶段的学习,在零开始的学习阶段主要是参考他的一系列文章:[总结]FFMPEG视音频编解码零基础学习方法。 本人在参考雷神文章的基础上,对一些操作进行了实现,而并不是单纯的进行搬运,毕竟人无完人,雷神...
2019-04-18 16:59:34 384
原创 45.原子操作
cpu处理一个指令,进程/线程在处理完这个指令之前是不会失去cpu的。例如:printf(); // 肯定能执行完,而不会中途执行别的操作int a = b+100; // 肯定能执行完,而不会中途执行别的操作...
2018-07-08 21:37:20 277
原创 41.死锁
1.死锁不是锁,是线程的一种状态2.造成死锁的原因:(1) 线程自己锁自己连续进行加锁操作,如下 pthread_mutex_lock(&mutex); // 加锁成功,mutex:1->0 pthread_mutex_lock(&mutex); // 由于mutex==0,加锁失败,阻塞(2)两个线程互相阻塞在对方的锁上解决方法:1) 让线程按照一定的顺序去访问共享...
2018-07-08 17:51:47 198
原创 37.设置线程分离属性
pthread_detach函数是在创建子线程之后再做的分离处理,这样有可能在没有实现分离的时候,子线程就死了。 而在创建子线程pthread_creat的时候设置分离属性,则保证了创建出来的子线程是分离的。...
2018-07-07 22:13:31 400
原创 36.线程相关函数
1.pthread_exit 函数原型:void pthread_exit(void* retval); retval指针:携带一些数据信息退出,必须指向全局区,堆区 作用:退出当前线程而不影响其他线程2.pthread_join 函数原型:int pthread_join(pthread_t thread,void** retval); thread:要回收的子线程的线程id ret...
2018-07-07 21:56:19 310
原创 33.守护进程
1.守护进程的特点 后台服务进程 独立于控制终端 周期性执行某任务 不受用户登录注销影响 一般采用以d结尾的名字(服务)2.进程组(1) 进程组的组长? 组里面的第一个进程 进程组的ID==进程组的组长的ID(2) 进程组组长的选定法则 进程中的第一个进程(3) 进程组ID的选定 进程组的ID就是组长的进程ID3.会话-多个进程组(1) 创建一个会话注意事项: 不能是进程组长(...
2018-07-07 21:02:30 193
原创 32.信号的捕捉
1.signal函数typedef void (*sighandler_t)(int);sighandler_t signal(int signum,sighandler_t handler);2.sigaction函数函数原型: int sigaction(int signum, //捕捉的信号 const struct sigaction* act, struct sigaction*...
2018-07-06 09:21:33 207
原创 31.信号集
1.概念:未决信号集: 没有被当前进程处理的信号阻塞信号集: 将某个信号放到阻塞信号集,这个信号就不会被进程处理阻塞解除之后,信号被处理2.自定义信号集 int sigempty(sigset_t* set);将set集合置空 int sigfillset(sigset_t* set);将所有信号加入set集合 int sigaddset(sigset_t* set,int signo)...
2018-07-06 00:04:25 225
原创 30.信号相关函数
1.kill--发送信号给指定进程 函数原型:int kill(pid_t pid,int sig);2.raise--自己给自己发信号 相当于:kill(getpid(),sig); 函数原型:int raise(int sig);3.abort--给自己发送异常终止信号 函数原型:void abort(void); 没有参数也没有返回值,永远不会调用失败4.闹钟(定时器) (1)alarm--...
2018-07-05 23:44:15 394
原创 28.Linux系统下信号的介绍
1.特点: 简单 携带的信息量少 使用在每个特定的场景中2.信号的状态 产生 未决状态:信号没有被处理 递达状态:信号被处理了3.处理方式 忽略 捕捉 执行了默认动作4.信号的四要素查看man文档:man 7 signal默认处理动作: Term:默认动作终止进程 Ign:默认动作忽略信号 Core:默认动作终止进程,并产生core文件 Stop:默认动作暂停进程 Co...
2018-07-05 23:33:38 318
原创 26.mmap创建匿名的内存映射区
mmap的时候: 第二个参数length:指定映射区的大小 第四个参数prot:需要添加MAP_ANON宏 第五个参数fd:-1
2018-07-05 16:23:25 1097
原创 25.mmap创建非匿名的内存映射区
1.必须有一个文件2.文件里的数据什么时候有用: (1)执行mmap时,将文件里的数据映射到映射区 (2)进程间通信:文件里的数据是没有用的,进程间操作的是映射区的数据...
2018-07-05 16:21:13 344
原创 24.mmap进程间通信
1.有血缘关系的 创建匿名和非匿名的映射区都可以 父子进程共享内存映射区2.没有血缘关系的 不能使用匿名映射的方式 只能借助磁盘文件创建映射区 不阻塞...
2018-07-05 16:19:44 216
原创 23.mmap的注意事项
1.如果对mmap的返回值(ptr)做++操作(ptr++),munmap是否能够成功? 不能 要想执行++操作,可以char* pt = ptr;2.如果open时O_RDONLY,mmap时prot参数指定PROT_READ | PROT_WRITE会怎样? mmap调用失败 open文件指定权限应该大于等于mmap第三个参数prot指定的权限3.如果mmap时文件偏移量offset为...
2018-07-05 16:16:36 579
原创 22.内存映射区mmap
1.mmap--创建内存映射作用:将磁盘文件的数据映射到进程虚拟地址空间中的动态库加载区中,可以看成一块虚拟内存,用户通过修改内存就能修改磁盘文件函数原型:void* mmap(void* addr, // 映射区首地址,传NULLsize_t length, // 映射区的大小 一般文件大小多大就填多大,默认换算成4K的整数倍,100byte->4Kbyte,5...
2018-07-05 16:14:05 267
原创 21.有名管道fifo
1.特点 有名管道 在磁盘上有这样一个文件,可通过命令ls -l查看前缀带p的文件 伪文件,在磁盘上大小永远为0 在内核中有一个对应的缓冲区 半双工的通信方式 默认阻塞2.使用场景 没有血缘关系的进程间通信3.创建方式 命令:mkfifo 管道名 函数:mkfifo 类似于mkdir4.fifo文件可以使用IO函数进行操作 open/close read/write 不能执...
2018-07-02 23:12:15 163
原创 20.设置匿名管道为非阻塞
1.特点 有名管道 在磁盘上有这样一个文件,可通过命令ls -l查看前缀带p的文件 伪文件,在磁盘上大小永远为0 在内核中有一个对应的缓冲区 半双工的通信方式 默认阻塞2.使用场景 没有血缘关系的进程间通信3.创建方式 命令:mkfifo 管道名 函数:mkfifo 类似于mkdir4.fifo文件可以使用IO函数进行操作 open/close read/write 不能执...
2018-07-02 22:16:10 1493
原创 19.查看匿名管道缓冲区大小
1.默认读写两端均为阻塞2.需要设置哪端为非阻塞,就设置哪端,例如设置读端为非阻塞: 利用变参函数:fcntl 通过修改文件属性的方式,即类似open的时候对应的flag属性 先获取原来的flags: int flags = fcntl(fd[0],F_GETFL); 设置新的flags: flags |= O_NONBLOCK 或者 flags = flags | O...
2018-07-02 22:13:07 1006
原创 18.匿名管道的读写行为
1.读操作(1) 有数据 read返回读出的字节数(2) 无数据 写端全部关闭: read解除阻塞,返回0,相当于读文件读到了尾部 写端没有全部关闭: read阻塞2.写操作(1) 读端全部关闭 管道破裂,进程被终止,因为内核给当前进程发送SIGPIPE信号(2) 读端没有全部关闭 缓冲区写满了: write阻塞 缓冲区没有满: write继续写...
2018-07-02 21:32:33 509
原创 17.父子进程使用匿名管道通信的相关问题
1.单个进程能否使用匿名管道完成读写操作?答案:可以,但没有意义。2.父子进程通信是否需要sleep函数?当以下情况发生时: 父进程写--写的慢 子进程读--读得快子进程需不需要sleep等待父进程写完?答案:不需要,因为读操作默认阻塞,缓冲区没有数据会读阻塞。3.父子通信需要注意的地方?答案:最好一个仅进程执行读操作,另一个进程执行写操作,例如 父进程读,关闭写端 ...
2018-07-02 21:26:22 373
原创 16.pipe函数创建匿名管道
int pipe(int fd[2]); fd--传出参数 fd[0]--读端 fd[1]--写端用法: int fd[2]; pipe(fd);
2018-07-02 21:14:17 271
原创 15.匿名管道
1.匿名管道的概念本质: 内核缓冲区 是伪文件,不占用磁盘空间,磁盘上不存在特点:两部分: 读端,写端,对应两个文件描述符 数据写端流入,读端流出 操作管道的进程被销毁之后,管道自动被释放(内核自动操作) 管道默认是阻塞的,读和写均默认阻塞2.匿名管道的原理内部的实现方式:队列 环形队列 特点:先进先出缓冲区大小: 默认4k 大小会根据实际情况做适当调整3.匿名管道的局限性: ...
2018-07-02 09:35:49 210
原创 14.进程间通信(IPC)相关概念
1.什么是IPC?进程间通信:InterProcess Communication,进程与进程间进行信息的交互。2.进程间通信常用的4种方式(介质)管道--简单信号--系统开销小共享映射区--有无血缘关系的进程间通信都可以本地套接字--稳定...
2018-07-02 09:32:57 131
原创 12.孤儿进程和僵尸进程
1.孤儿进程:爹生孩子爹先死,孩子还活着,孩子叫孤儿进程孤儿进程会被init进程领养,init进程变为孤儿进程的父亲为了释放子进程占用的资源: 进程结束之后,子进程能够自行释放虚拟地址空间中的用户区空间 但是释放不了pcb,必须由父进程释放2.僵尸进程孩子死了,爹还活着,爹不去释放孩子的pcb,孩子就变成了僵尸进程。默认情况下,对于fork出来的子进程,该子进程死掉以后,父进程是不会释放子进程...
2018-07-01 21:55:21 185
原创 11.exec函数族函数的使用
这里,就列举两个常用的函数:1.执行指定目录下的程序 int execl(const char* path,const char* arg,...); path:要执行的程序的绝对路径 变参arg:要执行的程序的需要的参数 第一arg:占位,填什么都行,一般填可执行文件名,相当于做个标记 后边的arg:命令的参数 参数写完之后添加:NULL(哨兵,表示到此结束)注意:一般用该函数来执行...
2018-07-01 21:51:54 239
原创 10.exec函数族功能介绍
1.让父子进程执行不相干的操作2.能够替换进程虚拟地址空间中的源代码.text段3.当前程序中调用另外一个应用程序,而不再执行原有的程序 首先想到exec之前需要fork4.实现换核不换壳的功能5.执行一个另外的程序不需要创建额外的虚拟地址空间...
2018-07-01 21:49:11 331
原创 9.父子进程间的数据共享问题
进程刚执行fork之后,两个虚拟地址空间的用户区数据完全相同,如下图所示: 如上图所示,父子进程中都用一个变量int num = 100,当两个进程仅对该变量执行读操作时,它们读取的是物理内存中的同一区域。而当父进程执行num--,子进程执行num++时,就会分别复制一份num放在不同的物理内存区域中,此时,物理内存就含有3份num。父子进程间的数据共享:读时共享,写时复制。父子进程之间能够使用...
2018-07-01 21:07:25 1109
原创 8.进程相关的命令ps和kill
ps: ps aux | grep "xxx" a:所有信息 u:用户相关信息 x:显示不依赖终端的进程 "xxx":与进程相关的关键词,写时不需要双引号"" ps ajx | grep "xxx" j:显示的信息更全kill: 查看信号:kill -l 1~31号信号是各Linux系统相同的,之后不一定。 杀死某个进程:kill -9 PID...
2018-07-01 21:03:24 637
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人