linux系统编程
文章平均质量分 90
一只菜只因啦
这个作者很懒,什么都没留下…
展开
-
09-线程同步
线程同步,指一个线程发出某一功能调用时,在没有得到结果之前,该调用不返回。同时其它线程为保证数据一致性,不能调用该功能。创建两个线程,让两个线程共享一个全局变量int number, 然后让每个线程数5000次数,看最后打印出这个number值是多少?线程A代码片段:线程B代码片段:代码片段说明代码中使用调用usleep是为了让两个子线程能够轮流使用CPU,避免一个子线程在一个时间片内完成5000次数数。原创 2023-11-04 01:58:01 · 21 阅读 · 0 评论 -
08-守护进程和线程
linux下线程的属性是可以根据实际项目需要,进行设置,之前讨论的线程都是采用线程的默认属性,默认属性已经可以解决绝大多数开发时遇到的问题,如果对程序的性能提出更高的要求,则需要设置线程属性,本节以设置线程的分离属性为例讲解设置线程属性。是由于主线程可能会在一个cpu时间片内连续创建了5个子线程,此时变量i的值变成了5,当主线程失去cpu的时间片后,子线程得到cpu的时间片,子线程访问的是变量i的内存空间的值,所以打印出来值为5.不受用户登录、注销的影响,一直在运行着,他们都是守护进程。原创 2023-11-03 22:59:22 · 21 阅读 · 0 评论 -
07-信号
信号是信息的载体,Linux/UNIX 环境下,古老、经典的通信方式, 现下依然是主要的通信手段。进程A给进程B发送信号,进程B收到信号之前执行自己的代码,收到信号后,不管执行到程序的什么位置,都要暂停运行,去处理信号,处理完毕后再继续执行。与硬件中断类似——异步模式。但信号是软件层面上实现的中断,早期常被称为“软中断”。每个进程收到的所有信号,都是由内核负责发送的。信号有三种状态:产生、未决和递达。信号的实现手段导致信号有很强的延时性,但对于用户来说,时间非常短,不易察觉。原创 2023-11-02 23:45:15 · 22 阅读 · 0 评论 -
06-进程间通信
任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。一个进程在由pipe()创建管道后,一般再fork一个子进程,然后通过管道实现父子进程间的通信(因此也不难推出,只要两个进程中存在血缘关系,这里的血缘关系指的是具有共同的祖先,都可以采用管道方式来进行通信)。原创 2023-11-02 17:03:22 · 21 阅读 · 0 评论 -
05-进程控制
有的时候需要在一个进程里面执行其他的命令或者是用户自定义的应用程序,此时就用到了exec函数族当中的函数。使用方法一般都是在父进程里面调用fork创建处子进程,然后在子进程里面调用exec函数。execl函数函数原型:参数介绍:path:要执行的程序的绝对路径变参arg:要执行的程序的需要的参数arg:占位,通常写应用程序的名字arg后面的命令的参数参数写完之后NULL返回值:若是成功,则不返回,不会再执行exec函数后面的代码;若是失败,会执行execl。原创 2023-11-02 12:02:36 · 18 阅读 · 0 评论 -
04-文件和目录操作
如果 whence 是 SEEK_END,文件偏移量将被设置为文件长度加上 offset,offset 可以为正也可以为负。新打开文件返回文件描述符表中未使用的最小文件描述符, 调用open函数可以打开或创建一个文件, 得到一个文件描述符.//连到该文件的硬连接数目,刚建立的文件值为1。S_IRWXU 00700 掩码, 过滤 st_mode中除文件所有者权限以外的信息。//文件的类型和存取的权限。以O_NONBLOCK方式打开可以做非阻塞I/O(NonblockI/O),非阻塞I/O。原创 2023-11-02 00:03:01 · 30 阅读 · 0 评论 -
03-makefile-gdb-文件IO
makefile文件中定义了一系列的规则来指定, 哪些文件需要先编译, 哪些文件需要后编译, 哪些文件需要重新编译, 甚至于进行更复杂的功能操作, 因为makefile就像一个Shell脚本一样, 其中也可以执行操作系统的命令. makefile带来的好处就是——“自动化编译”, 一旦写好, 只需要一个make命令, 整个工程完全自动编译, 极大的提高了软件开发的效率.GDB 可以打印出所调试程序的源代码, 当然, 在程序编译时一定要加上-g的参数, 把源程序信息编译到执行文件中。不然就看不到源程序了。原创 2023-11-01 15:47:45 · 28 阅读 · 0 评论 -
02-vim和gcc库的制作和使用
动态库在程序运行时才被载入, 也解决了静态库对程序的更新、部署和发布会带来麻烦. 用户只需要更新动态库即可, 增量更新. 为什么需要动态库, 其实也是静态库的特点导致.由于由静态库生成的可执行文件是把静态库加载到了其内部, 所以静态库生成的可执行文件一般会比动态库大.不同的应用程序如果调用相同的库, 那么在内存里只需要有一份该共享库的拷贝, 规避了空间浪费问题.库是二进制文件, 是源代码文件的另一种表现形式, 是加了密的源代码;2 部署更新麻烦, 因为静态库修改以后所有的调用到这个静态库的可执行文。原创 2023-11-01 10:45:51 · 75 阅读 · 0 评论 -
01-Linux常用基础命令
如开始在: /home/itcast/test/course/day1/test目录下, 执行了cd命令切换到家目录下, 然后在执行cd -又回到了/home/itcast/test/course/day1/test下.Linux系统的目录结构是一个倒立的树状结构, 根目录用/表示,对比windows目录结构理解linux的目录结构。在宿主目录下创建多级目录: mkdir -p ~/test/hello/world/aa。cp 拷贝目录也可以用-a参数, 这样可以保留被拷贝的文件的一些属性信息。原创 2023-11-01 00:03:37 · 25 阅读 · 0 评论