自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(119)
  • 收藏
  • 关注

原创 FFMPEG音视频开发从零开始的导向

  本人目前小白一枚,由于事先未涉及过音视频开发,故也是处在零开始阶段。首先,向音视频开发大神“雷神”雷博士致敬,一路走好,愿在天堂的你能够快乐!!!“雷神”对音视频开发的研究比较细致,较适合各个阶段的学习,在零开始的学习阶段主要是参考他的一系列文章:[总结]FFMPEG视音频编解码零基础学习方法。  本人在参考雷神文章的基础上,对一些操作进行了实现,而并不是单纯的进行搬运,毕竟人无完人,雷神...

2019-04-18 16:59:34 383

原创 46.临界区

加锁和解锁之间的这段代码就是临界区,如下图:

2018-07-08 21:38:38 369

原创 45.原子操作

cpu处理一个指令,进程/线程在处理完这个指令之前是不会失去cpu的。例如:printf();    // 肯定能执行完,而不会中途执行别的操作int a = b+100;  // 肯定能执行完,而不会中途执行别的操作...

2018-07-08 21:37:20 277

原创 44.信号量(信号灯)

2018-07-08 19:22:43 330

原创 43.条件变量

2018-07-08 19:19:27 198

原创 42.读写锁

2018-07-08 18:05:58 192

原创 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 197

原创 40.互斥锁(互斥量)

2018-07-08 17:38:46 181

原创 39.线程同步的思想

2018-07-07 22:24:06 261

原创 38.线程同步的概念

2018-07-07 22:22:32 207

原创 37.设置线程分离属性

  pthread_detach函数是在创建子线程之后再做的分离处理,这样有可能在没有实现分离的时候,子线程就死了。  而在创建子线程pthread_creat的时候设置分离属性,则保证了创建出来的子线程是分离的。...

2018-07-07 22:13:31 399

原创 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

原创 35.pthread_creat线程创建函数

2018-07-07 21:23:05 225

原创 34.线程的相关概念

2018-07-07 21:12:27 201

原创 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

原创 29.阻塞信号集和未决信号集的概念

1.存在于PCB中2.不能直接操作3.阻塞信号集:  要屏蔽的信号未决信号集:  没有处理的信号的集合

2018-07-05 23:35:50 791

原创 28.Linux系统下信号的介绍

1.特点:  简单  携带的信息量少  使用在每个特定的场景中2.信号的状态  产生  未决状态:信号没有被处理  递达状态:信号被处理了3.处理方式  忽略  捕捉  执行了默认动作4.信号的四要素查看man文档:man 7 signal默认处理动作:  Term:默认动作终止进程  Ign:默认动作忽略信号  Core:默认动作终止进程,并产生core文件  Stop:默认动作暂停进程  Co...

2018-07-05 23:33:38 318

原创 27.父子进程永远共享的东西?

文件描述符内存映射区

2018-07-05 16:30:48 259

原创 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 343

原创 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 576

原创 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 162

原创 20.设置匿名管道为非阻塞

1.特点  有名管道  在磁盘上有这样一个文件,可通过命令ls -l查看前缀带p的文件  伪文件,在磁盘上大小永远为0  在内核中有一个对应的缓冲区  半双工的通信方式  默认阻塞2.使用场景  没有血缘关系的进程间通信3.创建方式  命令:mkfifo 管道名  函数:mkfifo 类似于mkdir4.fifo文件可以使用IO函数进行操作  open/close  read/write  不能执...

2018-07-02 22:16:10 1491

原创 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 1003

原创 18.匿名管道的读写行为

1.读操作(1) 有数据  read返回读出的字节数(2) 无数据  写端全部关闭:    read解除阻塞,返回0,相当于读文件读到了尾部  写端没有全部关闭:    read阻塞2.写操作(1) 读端全部关闭  管道破裂,进程被终止,因为内核给当前进程发送SIGPIPE信号(2) 读端没有全部关闭  缓冲区写满了:    write阻塞  缓冲区没有满:    write继续写...

2018-07-02 21:32:33 507

原创 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 129

原创 13.wait函数和waitpid函数

2018-07-01 21:58:27 255

原创 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 237

原创 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关注的人

提示
确定要删除当前文章?
取消 删除