![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux C编程
文章平均质量分 68
dongmengyuan1020
因为不完美,我们才有不断追求完美的动力
展开
-
线程控制(二)
线程终止*linux中有两种方式使线程终止 >1.通过return从线程函数返回 >2.通过调用函数pthread_exit()使线程退出 pthread_exit在头文件pthread.h中声明,函数原型为: #include<pthread.h> void pthread_exit(void *retval>*注意: >1.在主线程中,如果从main函数返回或调用了ex原创 2016-08-02 10:36:20 · 438 阅读 · 0 评论 -
进程操作
创建进程 每个进程由进程ID号标识,进程被创建时系统就会为其分配一个唯一的进程ID. 创建进程的两种方式: 1.由操作系统创建 2.由父进程创建 *注意: 由操作系统创建的进程,它们之间是平等的,一般不存在资源继承关系.父进程创建的进程(子进程),它们和父进程存在隶属关系.子进程又可以创建进程,形成一个进程家族.子进程可以继承其父进程几乎所有的资源. **原创 2016-07-28 11:50:31 · 390 阅读 · 0 评论 -
进程间通信1
管道 管道由于传递数据只能单向传递,因此又称半双工管道,它是一种两个进程间进行单向通信的机制. 局限性: *数据只能由一个进程流向另一个进程,若要进行全双工通信,则需建立两个管道. *管道只能用于具有亲缘关系的进程间通信. *管道无名字. *管道的缓冲区大小受限制. *管道所传递的是无格式的字节流,这就要求管道的输入和输出事先约定好数据格式. 使用管原创 2016-10-07 10:53:30 · 479 阅读 · 0 评论 -
进程间通信2
有名管道(FIFO) 有名管道是一个设备文件. FIFO不同于管道之处在于它提供了一个路径名与之关联,以FIFO的文件形式存储于文件系统中.即使进程与创建FIFO的进程不存在亲缘关系,只要可以访问该路径,就能够通过FIFO相互通信. FIFO(First In First Out)总是按照先进先出的原则工作,第一个被写入的数据将首先从管道中读出.有名管道的创建与读写1.在s原创 2016-10-07 11:37:53 · 452 阅读 · 0 评论 -
进程间通信3
消息队列 消息队列是一个存放在内核中的消息链表.每个消息队列由消息队列标识符标识.因为存放在内核中,所以只有在内核重启或显式删除一个消息队列时,该消息队列才会被真正删除. 重要的几个数f结构 2.msqid_ds内核数据结构 3.ipc_perm内核数据结构消息队列的创建 每个消息队列在系统范围内对应唯一的键值.要获得一个消息队列的描述符,只要提供该消息队列的键值即可,该键值通原创 2016-10-07 16:09:07 · 453 阅读 · 0 评论 -
进程间通信4
消息队列的读写写消息队列 函数msgsnd用于向消息队列发送(写)数据.定义在头文件sys/msg.h中int msgsnd(int msqid, struct msgbuf *msgp, size_t msgsz, int magflg);msqid: 函数向msgid标识的消息队列发送了一个消息. msgp: msgp指向发送的消息. msgsz: 要发送的消息的大小,不包含消息类型占用的4原创 2016-10-07 16:57:15 · 306 阅读 · 1 评论 -
Linux C 信号及信号处理(一)
Linux信号介绍*信号是一种软件中断,提供一种处理异步事件的方法,也是进程间唯一的异步通信方式。 *一个进程一旦收到信号就会打断原来的程序执行流程来处理该信号。即当信号发送到某个进程中时,操作系统会中断该进程的正常流程,并进入相应的信号处理函数执行操作,完成后再回到中断的地方继续执行。*由于进程不知道什么时候会收到信号,因此信号通信是异步的。 可以使用"kill -l"命令来查看系统所支持的信原创 2016-09-20 20:19:46 · 747 阅读 · 0 评论 -
信号处理
信号的相关处理signal函数 用来设置进程在接收到信号时的动作.在Shell下输入man signal可获取函数原型如下: signal会根据参数signum指定的信号编号来设置该信号的处理函数,*当指定的信号到达时就会跳转到参数handler指定的函数执行. 如果参数handler不是函数指针,则必须是常数SIG_IGN(忽略该信号)或SIG_DFL(对该信号执行默认操作).**handl原创 2016-10-06 15:52:40 · 687 阅读 · 0 评论 -
线程同步
异步信号*信号与任何线程都是异步的. *linux多线程扩展函数int pthread_kill(pthread_t threadid, int signo); int pthread_sigmask(int how, const sigset_t *newmask, sigset_t *oldmask); int sigwait(const sigset_t *set, int *si原创 2016-10-06 15:55:42 · 412 阅读 · 0 评论 -
信号处理函数的返回及信号的发送
信号处理函数的返回*信号处理函数可以正常返回,也可以调用其他函数返回到程序的主函数中,而不是从该处理函数返回.setjmp/longjmp 使用longjmp可以跳转到setjmp设置的位置. 我们可以在希望返回的位置使用setjmp,直接调用setjmp时返回0,当从longjmp返回时,setjmp的返回值是longjmp的第2个参数的值,可以利用这一点使多个longjmp返回到一个setjmp原创 2016-10-06 17:16:01 · 1824 阅读 · 0 评论 -
实现chmod命令
文件的访问权限修改在介绍如何实现文件权限修改之前,先来说一下在linux下如何查看文件属性以及如何修改文件访问权限吧。 查看文件属性 1. 查看某个目录下**所有**文件属性 在shell下通过命令**ls -l** 即可查看 2.查看一个**具体**文件的属性 在shell下通过命令**ls -l filename**即可实现修改文件访问权限 在shell下通过命原创 2016-07-21 10:34:00 · 964 阅读 · 2 评论 -
文件的访问权限控制
linux是一个安全的操作系统,它对用户访问权限的控制很好的实现了安全控制。但是,你要是想知道文件的相关属性,你会在shell下使用什么命令来实现呢? 要查看文件的属性,只需在shell下通过命令ls -l你可以先通过命令ls -l 来查看你目录下所有文件的属性。再通过ls -l命令来具体到某一个文件 .例如,我用ls -l 来查看我所有文件的属性如下:原创 2016-07-19 08:12:21 · 1663 阅读 · 0 评论 -
线程控制(三)
线程同步互斥锁*互斥锁通过锁机制来实现线程间的同步.在同一时刻它通常只允许一个线程执行一个关键部分的代码. 互斥锁函数 *使用互斥锁前,必须先进行初始化操作.初始化有两种方式: >1.静态赋值法,将宏结构常量PTHREAD_MUTEX_INITIALIZER赋给互斥锁,操作语句为:pthread_mutex_t mutex = PTHREAD_MUTEX_IN原创 2016-08-02 16:28:17 · 544 阅读 · 0 评论 -
线程控制(一)
线程介绍*线程是计算机中独立运行的最小单位,运行时占用很少的系统资源.被看成是操作系统分配CPU时间的基本单位.*在用户看来:各个线程同时执行. 在操作系统调度上看:各个线程交替进行,系统不停在各个线程之间切换,每个线程只有在系统分配给它的时间片内才能取得CPU的控制权,执行线程中的代码.*在多CPU多核的主机上,多个线程是可以同时运行的.*多线程相对多进程的优点: >1.创建一个新的线程花原创 2016-08-01 20:40:23 · 649 阅读 · 0 评论 -
进程控制( 一)
进程概述一.linux进程 linux是一个多用户,多任务的操作系统. 多用户:多个用户可以在同一时间使用计算机; 多任务:linux可以同时同时执行几个任务,可以在还未执行完一个任务时又执行另一个任务. 进程:进程是一个动态的实体,是程序的一次执行过程.进程是操作系统资源分配的基本单位.简单的说,进程是运行中的程序 a.进程和程序的区别 1.进程是动态的,程序是原创 2016-07-28 08:51:36 · 277 阅读 · 0 评论