多用户(多进程)银行系统总结:
主要技术:共享内存;信号量;proc;数据库;守护进程;信号;动态链接库
共享内存:共享内存中放置了一个结构体数组和一个信号量标志位,此信号量标志位只允许 一个getshm()函数去获得结构体数组中 的结构体.结构体数组中的每个结构体又包含结构体信息和一个信号量标志位,此信号量标志位,为了查看这个结构体有没有没占用
信号量: 信号量也是一块小的内存空间
守护进程:一个进程,fork() 出一个子进程后,父进程退出,然后执行execut();此时第一子进程退出了当前进程组,重新开辟了一 个进程组,并成为了组长,然后第一子进程再fork()出第二子进程(孙进程);然后第一子进程退出,此时第二子进程就独立存在于这个进程组中而且没有了终端,这个第二子进程便是守护进程
守护进程它的子进程也没有控制终端,只在后台执行
信号:简单的发送信号用 kill(),signal(),较复杂的信号发送用 sigqueue();sigaction(),一般都是匹配使用,具体参数查看man手 册
错误1: 从数据库中读出的数据,末尾没有'/0',当有程序在外部 printf时,
打印完一条数据库中的数据时,printf不会停止,而是继续打印数据
库中的一条数据后面的数据.
当要从数据库中读数据时,要在给数据库定义数据时,先把数据所有位先
置为 '/0'.
错误2: 当用 strcmp函数时 ,
如char name[10],char name[11];定义的 两个 数组位数不相同 ,
会导致 这两个字符串不匹配.
错误3: 当要从数据库中读数据时,先要查看数据库实例开启了没有,如果没有开
启,要先进入数据库用户 startup 开启数据库
一些相关命令: ps -ef| grep ... 查询当前运行的进程
ipcs -m 查询进程通信机构ipc机构
ipcrm -m spid 删除相关的进程通信的机构
注意: 1:server服务器一般只能启动一次,如果已经启动,注意不要重复开启
2: kill -9 id 可删除删除服务器进程和客户端进程
3:进程间通信机构 如共享内存等,一般也只启动一次,如果重复开启,可能
会导致数据混乱
4:连续执行了几个scanf之后,要调用一下getchar()函数;
5:当 客户端 接受完信号之后 ,用pause()函数挂起,等待服务器执行完后台操作之后,接收来自服务器的信号,然后继续往下执行 6:scanf()函数中,参数是一个地址,如果是 一个数组,则可以直接用数组名(即此数组的首地址);