C语言笔记(进程,线程)

来源:互联网 发布:淘宝美食网 编辑:程序博客网 时间:2024/05/20 02:56

程序编写时要有架构,通过封装,体现出程序的架构,有了架构才能够才好拓展,维护,有函数接口,才好拓展,架构也明朗。
特殊设备(文件,linux下一切皆为文件)如管道,字符设备,读不到数据会阻塞。直接对文件操作即可以模拟硬件操作的效果(写/dev/input/even* 键盘文件,可以模拟键盘功能。
ateixt(void (*function)(void))绑定(注册)function指针定义的函数,函数退出,返回时会自动执行这个函数。
退出main函数的四个方法:return 0;eixt();pthread_exit()(主函数也是一个线程),和信号打断(kill)
函数要改变指针,则需要传二级指针给函数。
给结构体整体赋值 struct A aa;
aa = struct A { int member1;  charmember2, int *p};在程序中用强制类型转换如结构体赋初值一样,在程序中间给结构体赋值。
char 型数组,int型数组,指针数组 charar[],int ar[] ,int *ar[]  但这个int (*P)[12]这是数组指针。
用双引号可以将字符串相连接"aaa""bbbb"等同于一个字符串"aaabbbb",中间的两个引号之间可以有空格,但不能有逗号。
--------------------------------
内存中有一个缓冲红区(fb(frontbuf)),其大小对应屏幕,三维的(1024*768*32);操作这个缓冲区 就是操作屏幕。fb 的数据类型是short,后面的数字“32”是位深。
声卡子系统,自己写的驱动都要写子系统里才能通用.驱动只能播放原始数据,写/dev/dsp声卡子系统文件。
--------------------------------
子进程退出会产生一个信号。
要清除管道内的数据,返回值为空则说明数据已经读完,用fcntl()函数可以设置读的阻塞也可以还原阻塞,因为读管道时若管道为空,则读函数会阻塞,从而没有返回值。可以读管道,通过重定向,dup2()复制输出输入文件描述符。
iconv 命令用于转换字符编码。windows 常为gd2312linux下的是utf-8 .有命令都会有相应的函数。
mplayer -input cmdlist 可以查看mplayer所有命令。
mplaqy /
-------------------------------
如果函数参数结构体指针后还有一个整型参数,那么定义的结构体是个数组,后面的整型标记第几个元素。
系统调用什么情况都有可能,所以要做容错处理。perror()函数。
-------------------------------
(命令ipcs)
进程间的通讯有六种:信号,管道,消息队列,共享内存,信号量,socket套接字)。
信号:只是传送数据(1~64),系统定义特定数据代表的意义(相当于暗号);
管道(文件):有名管道和无名管道,是创建文件,通过读写文件来实现数据交互,但这个文件是在文件系统上,在内存上,而不在硬盘,因为硬盘的读写太慢,管道必须两个进程同时运行。
消息队列:不必两个进程同时运行,可以实现离线发送。接收不到会阻塞。

共享内存:是将一个进程的内存地址映射到另一个进程,然后对地址读写。相当于都能访问同一地址,共享内存用于大量数据传送,小数据量用管道.共享内存映射的地址让系统自动选择,否则会很危险。系统会选择堆与栈的交界处,因为堆向上走栈向下走。

信号量:(锁机制),防止同时写同一个内存块,文件等。锁机制是在内核空间创建一个计数器(count),(count 为0则不能写),这是个协议锁,要所有进程都加锁才有作用而且加的同一把锁即同一个信号量ID。一个好的程序,尽量避免用信号量,能不用,尽量不用,就像尽量不要用多级指针。 加锁相当于count减1。上完锁之后记得解锁,要不会形成死锁。锁(在内核空间的一个计数器)在内核空间,所以子进程锁上,父进程可以去解子进程的锁,但这样做容易做成死锁。

---------------------------------

线程:进程可以有多个,线程是在进程之上,进程是在内核之上。所以线程不属于系统调用。线程是以函数的单位。线程主要是执行一个函数,另外开辟一个栈,使之可以与main函数并发进行。线程是将进程封装一层,进程有的,线程也有。
线程不是跟进程一样复制一份代码,而是在进程的栈段再开辟一个栈空间,其他的段都不变。因此线程是寄生于进程,进程结束,线程也会结束。
执行另一个可执行文件时用进程(调用exec家族函数),执行两段不同代码时用线程,当然在这种情况下也可以用进程。exec家族函数会覆盖所有段,所以必须创建进程。

线程退出处理函数:pthread_cleanup_push pthread_cleanup_pop
与进程一样防止同时写一个文件(地址),线程有互斥量,相当于信号量。
线程要会创建,上锁。
-------------------------
音频:采样频率,量化位,声道数。

原创粉丝点击