https://www.iteye.com/blog/lobin-1663268
-
C: Linux C 编程 - 属性__attribute__ ((attribute-list)) https://www.iteye.com/blog/lobin-2516444
-
C: Linux C 编程 - once init https://www.iteye.com/blog/lobin-2517156
-
C: Linux C 编程 - dynamic linking loader https://www.iteye.com/blog/lobin-2516987
-
C: Linux C 编程 - 编写静态链接库 https://www.iteye.com/blog/lobin-2326336
-
C: Linux C 编程 - 编写动态链接库 https://www.iteye.com/blog/lobin-2437639
-
C: Linux C 编程 - 编写动态链接库(2) https://www.iteye.com/blog/lobin-2516986
-
C: Linux C 编程 - 编写动态链接库(3)https://www.iteye.com/blog/lobin-2524416
-
C: Linux C 编程 - Cygwin下编写动态链接库 https://www.iteye.com/blog/lobin-2516938
-
C: Linux C 编程 - 文件 https://www.iteye.com/blog/lobin-2517059
-
C: Linux C 编程 - 文件描述符 https://www.iteye.com/blog/lobin-2516961
-
C: Linux C 编程 - 文件操作 https://www.iteye.com/blog/lobin-2347235
-
C: Linux C 编程 - clone https://www.iteye.com/blog/lobin-2517308
-
C: Linux C 编程 - 线程 https://www.iteye.com/blog/lobin-2516877
-
C: Linux C 编程 - 线程属性 https://www.iteye.com/blog/lobin-2516888
-
C: Linux C 编程 - 线程继承调度属性 https://www.iteye.com/blog/lobin-2435049
-
C: Linux C 编程 - 线程调度参数 https://www.iteye.com/blog/lobin-2436797
-
C: Linux C 编程 - 线程私有数据 https://www.iteye.com/blog/lobin-2517155
-
C: Linux C 编程 - 线程终止 https://www.iteye.com/blog/lobin-2516889
-
C: Linux C 编程 - 线程函数返回 https://www.iteye.com/blog/lobin-2328164
-
C: Linux C 编程 - 线程退出 https://www.iteye.com/blog/lobin-2436748
-
C: Linux C 编程 - 线程通信 https://www.iteye.com/blog/lobin-2516885
-
C: Linux C 编程 - 通过clone方式创建线程 https://www.iteye.com/blog/lobin-2517309
-
C: Linux C 编程 - 互斥锁 https://www.iteye.com/blog/lobin-2381977
-
C: Linux C 编程 - 自旋锁 https://www.iteye.com/blog/lobin-2435437
-
C: Linux C 编程 - 条件变量 https://www.iteye.com/blog/lobin-2384783
-
C: Linux C 编程 - 进程 https://www.iteye.com/blog/lobin-2433236
-
C: Linux C 编程 - fork https://www.iteye.com/blog/lobin-2516446
-
C: Linux C 编程 - 子进程退出 https://www.iteye.com/blog/lobin-2517136
-
C: Linux C 编程 - 守护进程 https://www.iteye.com/blog/lobin-2517093
-
C: Linux C 编程 - 僵尸进程 https://www.iteye.com/blog/lobin-2517135
-
C: Linux C 编程 - IPC https://www.iteye.com/blog/lobin-2347234
-
C: Linux C 编程 - 父子进程间通信 https://www.iteye.com/blog/lobin-2516972
-
C: Linux C 编程 - 同步 https://www.iteye.com/blog/lobin-2516886
-
C: Linux C 编程 - 共享内存 https://www.iteye.com/blog/lobin-2431415
-
C: Linux C 编程 - 管道 https://www.iteye.com/blog/lobin-2431418
-
C: Linux C 编程 - 命名管道 https://www.iteye.com/blog/lobin-2517060
-
C: Linux C 编程 - socket https://www.iteye.com/blog/lobin-2351329
-
C: Linux C 编程 - AF_INET6 https://www.iteye.com/blog/lobin-2517137
-
C: Linux C 编程 - AF_UNIX https://www.iteye.com/blog/lobin-2516971
-
C: Linux C 编程 - SOCK_DGRAM https://www.iteye.com/blog/lobin-2517537
-
C: Linux C 编程 - 广播 https://www.iteye.com/blog/lobin-2517540
-
C: Linux C 编程 - 组播 https://www.iteye.com/blog/lobin-2517542
-
C: Linux C 编程 - 信号量 https://www.iteye.com/blog/lobin-2344060
-
C: Linux C 编程 - 信号处理 https://www.iteye.com/blog/lobin-2435795
-
C: Linux C 编程 - 系统调用 https://www.iteye.com/blog/lobin-2517826
-
C: Linux C 编程 - select https://www.iteye.com/blog/lobin-2517787
-
C: Linux C 编程 - poll https://www.iteye.com/blog/lobin-2517799
-
C: Linux C 编程 - epoll https://www.iteye.com/blog/lobin-2435794
-
C: Linux C 编程 - 网络编程 https://www.iteye.com/blog/lobin-2516890
-
C: Linux C 编程 - Mysql https://www.iteye.com/blog/lobin-2520001
-
C: Linux C 编程 - Mail https://www.iteye.com/blog/lobin-2520004
-
C: Linux C 编程 - 图像处理 https://www.iteye.com/blog/lobin-2516443
-
C: Linux C 编程 - SDL图像处理 https://www.iteye.com/blog/lobin-2516506
-
C: Linux C 编程 - FFmpeg多媒体 https://www.iteye.com/blog/lobin-2346290
-
C: Linux C 编程 - SDL音频处理 https://www.iteye.com/blog/lobin-2516507
-
C: Linux C 编程 - SDL+mpg123音频处理 https://www.iteye.com/blog/lobin-2437638
-
C: Linux C 编程 - SDL视频处理 https://www.iteye.com/blog/lobin-2437866
-
C: Linux C 编程 - SDL多媒体 https://www.iteye.com/blog/lobin-2508590
静态链接库
动态链接库
C标准库
进程和线程
进程是系统进行资源分配和调度的基本单位。
进程其实也存在父子关系,也存在进程组,还有进程组leader。
在程序中我们也可以创建进程。
创建进程最简单的方式就是通过fork,通过这个系统调用可以简单的创建一个进程。需要注意的是,通过这种方式创建的进程是子进程。
另外一种创建进程的方式就是通过clone系统调用。
线程detach状态
如果线程已经处于detached状态,当线程终止时,线程资源将自动释放还给系统。这不同于joinable状态的线程,线程终止时需要通过调用pthread_join来释放线程资源。
如果线程已经处于detached状态,不能再将线程设置为joinable状态。
并且如果线程已经处于detached状态,如果再尝试detach,将导致不确定的行为,可能会导致程序中断退出。
pthread_attr_setdetachstate
函数原型
int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
pthread_attr_getdetachstate
函数原型
int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate);
设置线程detach状态为joinable状态
线程detach状态默认就是joinable状态,所以其实不用设置。
#include <stdio.h> #include <pthread.h> void* start_routine(void *arg) { char *name = (char *) (arg); printf("thread %s called.\n", name); return NULL; } int main() { pthread_t pthread; pthread_attr_t attr; if (pthread_attr_init(&attr)) { return -1; } if (pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE)) { return -1; } pthread_create(&pthread, &attr, start_routine, "#1"); pthread_attr_destroy(&attr); return 0; }
设置线程detach状态为detached状态
#include <stdio.h> #include <pthread.h> void* start_routine(void *arg) { char *name = (char *) (arg); printf("thread %s called.\n", name); return NULL; } int main() { pthread_t pthread; pthread_attr_t attr; if (pthread_attr_init(&attr)) { return -1; } if (pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED)) { return -1; } pthread_create(&pthread, &attr, start_routine, "#1"); pthread_attr_destroy(&attr); return 0; }
相关推荐
Linux C编程从初学到精通,是许多程序员学习Linux C的起点,它通过实例讲解和理论结合的方式,帮助读者理解Linux环境下C语言编程的各个方面。 首先,初学者需要了解Linux操作系统的基础知识,包括Linux的文件系统...
《LinuxC编程实战》内容翔实,主要包括:Linux系统下C语言及其编程环境的介绍,系统编程的所 有主题——文件和目录、进程、线程、信号、进程间通信、网络编程和图形界面编程、出错处理、库的 创建与使用、编写...
《Linux C语言编程实战》这本书旨在帮助读者深入理解这两种技术,并通过实践来提升技能。源代码是学习过程中不可或缺的一部分,因为它使读者能够直接查看和运行程序,从而加深对概念的理解。 首先,我们要了解Linux...
《宋劲杉-Linux C编程一站式学习》这本书深入浅出地介绍了Linux环境下的C语言编程技术,涵盖了从基础语法到高级特性的全方位知识。作者宋劲杉,毕业于清华大学,以其深厚的学术背景和实践经验,为读者提供了宝贵的...
在“精通Linux C编程源代码”这个主题中,我们探讨的是如何在Linux操作系统环境下使用C语言进行高效且灵活的程序开发。C语言是系统级编程的基石,而在Linux这一开源操作系统上,C语言更是得到了广泛的应用,从内核...