- 浏览: 63888 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
brxonline:
提示不能这样写234390216 写道234390216 写道 ...
mysql导出数据为excel -
234390216:
234390216 写道不行啊,错误
提示不能这样写
mysql导出数据为excel -
234390216:
不行啊,错误
mysql导出数据为excel
1.main 函数
c程序总是从main函数开始执行,当内核执行c程序时,在调用main前先调用一个特殊的启动例程,启动例程从内核获得命令行参数和环境变量值,然后为按上述方式调用main做好安排
2.进程终止
有8种方式使进程终止:
1)从main返回
2)调用exit
3)调用_exit或_Exit
4)最后一个线程从其启动例程返回
5)最后一个线程调用pthread_exit
6)调用abort
7)接到一个信号并终止
8)最后一个线程对取消请求做出相应
有三个函数用来正常终止一个程序
#include <stdlib.h> void exit(int status); void _Exit(int status); #include <unistd.h> void _exit(int status);
_exit和_EXit立即进入内核,exit则先执行一些清理处理。
atexit函数用来登记终止处理程序
#include <stdlib.h>
int atexit(void (*func)(void));
例:
#include "apue.h" static void my_exit1(void); static void my_exit2(void); int main(void) { if (atexit(my_exit2) != 0) err_sys("can't register my_exit2"); if (atexit(my_exit1) != 0) err_sys("can't register my_exit1"); if (atexit(my_exit1) != 0) err_sys("can't register my_exit1"); printf("main is done\n"); return(0); } static void my_exit1(void) { printf("first exit handler\n"); } static void my_exit2(void) { printf("second exit handler\n"); }
3.命令行参数(略)
4.环境表
5.c程序的存储空间
6.共享库
7.存储器分配
#include <stdlib.h> void *malloc(size_t size); void *calloc(size_t nobj, size_t size); void *realloc(void *ptr, size_t newsize);
|
All three return: non-null pointer if OK, NULL on error |
void free(void *ptr);
|
8.环境变量
用于环境变量的操作函数
#include <stdlib.h>
char *getenv(const char *name);
#include <stdlib.h> int putenv(char *str); int setenv(const char *name, const char *value, int rewrite); int unsetenv(const char *name);
9.setjmp和longjmp跨越函数跳转
#include <setjmp.h>
int setjmp(jmp_buf env);
|
Returns: 0 if called directly, nonzero if returning from a call to longjmp |
void longjmp(jmp_buf env, int val); |
例:
#include "apue.h" #include <setjmp.h> static void f1(int, int, int, int); static void f2(void); static jmp_buf jmpbuffer; static int globval; int main(void) { int autoval; register int regival; volatile int volaval; static int statval; globval = 1; autoval = 2; regival = 3; volaval = 4; statval = 5; if (setjmp(jmpbuffer) != 0) { printf("after longjmp:\n"); printf("globval = %d, autoval = %d, regival = %d," " volaval = %d, statval = %d\n", globval, autoval, regival, volaval, statval); exit(0); } /* * Change variables after setjmp, but before longjmp. */ globval = 95; autoval = 96; regival = 97; volaval = 98; statval = 99; f1(autoval, regival, volaval, statval); /* never returns */ exit(0); } static void f1(int i, int j, int k, int l) { printf("in f1():\n"); printf("globval = %d, autoval = %d, regival = %d," " volaval = %d, statval = %d\n", globval, i, j, k, l); f2(); } static void f2(void) { longjmp(jmpbuffer, 1); }
10.资源限制getrlimit和setrlimit
#include <sys/resource.h>
int getrlimit(int resource, struct rlimit *rlptr);
int setrlimit(int resource, const struct rlimit *rlptr);
例:
#include "apue.h" #if defined(BSD) || defined(MACOS) #include <sys/time.h> #define FMT "%10lld " #else #define FMT "%10ld " #endif #include <sys/resource.h> #define doit(name) pr_limits(#name, name) static void pr_limits(char *, int); int main(void) { #ifdef RLIMIT_AS doit(RLIMIT_AS); #endif doit(RLIMIT_CORE); doit(RLIMIT_CPU); doit(RLIMIT_DATA); doit(RLIMIT_FSIZE); #ifdef RLIMIT_LOCKS doit(RLIMIT_LOCKS); #endif #ifdef RLIMIT_MEMLOCK doit(RLIMIT_MEMLOCK); #endif doit(RLIMIT_NOFILE); #ifdef RLIMIT_NPROC doit(RLIMIT_NPROC); #endif #ifdef RLIMIT_RSS doit(RLIMIT_RSS); #endif #ifdef RLIMIT_SBSIZE doit(RLIMIT_SBSIZE); #endif doit(RLIMIT_STACK); #ifdef RLIMIT_VMEM doit(RLIMIT_VMEM); #endif exit(0); } static void pr_limits(char *name, int resource) { struct rlimit limit; if (getrlimit(resource, &limit) < 0) err_sys("getrlimit error for %s", name); printf("%-14s ", name); if (limit.rlim_cur == RLIM_INFINITY) printf("(infinite) "); else printf(FMT, limit.rlim_cur); if (limit.rlim_max == RLIM_INFINITY) printf("(infinite)"); else printf(FMT, limit.rlim_max); putchar((int)'\n'); }
发表评论
-
UNIX网络编程(1)-简介
2011-10-06 17:31 7921.bzero函数 bzero 等同于memset(void ... -
UNIX编程(15)-进程间通信
2011-08-07 12:09 1122. 管道 #include <un ... -
UNIX编程(14)-高级IO
2011-08-03 21:36 14161.非阻塞IO 对于一个给定的描述符有两种方法对其指定非阻塞 ... -
UNIX编程(13)-守护进程
2011-08-02 21:59 9601.守护进程的编程规则 1)用umask将文件模式创建屏蔽字 ... -
UNIX编程(12)-线程控制
2011-07-27 15:26 9461.线程限制 某些系统有线程的限制,可以通过sysconf函 ... -
UNIX编程(11)-线程
2011-07-27 14:34 9801.线程标识 每个线程都有一个线程ID,线程ID只在它所属的 ... -
UNIX编程(10)-信号
2011-07-20 21:18 10291.signal函数 #include ... -
UNIX编程(9)-进程关系
2011-07-12 14:41 11521.终端登录 2.网络登录 3.进程组 ... -
UNIX编程(8)-进程控制
2011-07-09 11:37 12041.进程标识符 每个进程 ... -
UNIX编程(6)-系统数据文件和信息
2011-06-28 16:35 11971.口令文件 口令文件存储在/etc/passwd中,是一个A ... -
UNIX编程(5)-标准IO库
2011-06-27 16:55 9701.流的定向 freopen函数清 ... -
UNIX编程(4)-文件和目录
2011-06-23 16:56 12781.stat,fstat,lstat函数 #include & ... -
UNIX编程(3)-文件IO
2011-06-21 17:45 14601.open函数 #include <fcntl.h&g ... -
UNIX编程(2)-UNIX标准化
2011-06-15 11:41 7181.ISO c 2.IEEE POSIX 3.Single U ... -
UNIX编程(1)-基础知识
2011-06-15 10:54 8391.登陆名 登陆名放在/etc ...
相关推荐
《UNIX网络编程-第2卷-进程间通讯》是一本深入探讨UNIX系统中进程间通信(Inter-Process Communication, IPC)的经典著作。该书详细阐述了如何在多进程环境中实现有效的数据交换,这对于理解操作系统原理、开发高效...
### Unix多进程编程知识点 #### 1. Unix进程概述 Unix系统是一种多用户、多任务的操作系统,支持多个进程同时运行。进程是程序在计算机上的一次执行过程,每个进程都拥有自己的地址空间、数据栈以及其他运行时资源...
本实验源码着重展示了无名管道(unnamed pipe)和IPC通信的C语言实现,这对于理解Unix系统编程和多进程协作至关重要。 无名管道是一种半双工的通信方式,数据只能单向流动,且只存在于内存中,不持久化存储。其工作...
《UNIX环境高级编程》是一本深受程序员和系统管理员喜爱的经典之作,主要针对那些希望深入理解UNIX操作系统,并能熟练进行...无论是自学还是作为参考手册,这本书及其相关资料都能为你的UNIX编程之路提供强大的支持。
《UNIX环境高级编程》第9章主要讨论的是进程间的关系,包括进程的父子关系、进程组、对话期的概念,以及登录shell和相关进程之间的交互。这一章的内容是建立在前一章关于进程控制的基础之上的,进一步深入探讨了进程...
根据提供的信息,我们可以了解到这是一本关于《UNIX编程艺术》的经典书籍,该书提供了高清扫描版本,并且包含完整的书签,方便读者进行阅读与查阅。接下来,我们将从这本书的主题出发,探讨几个重要的UNIX编程概念与...
UNIX网络编程----进程间通信----卷2【第二版】源码
《Unix编程艺术》是一本深度探讨Unix操作系统编程的权威之作,由著名的计算机科学家Eric S. Raymond撰写。这本书全面覆盖了Unix编程的各种技术和实践,旨在帮助读者理解和掌握Unix系统的精髓,从而提升软件开发的...
《Unix编程艺术》、《Unix环境高级编程(第二版)》和《Unix网络编程(第二版)》是三本在IT领域中具有深远影响力的经典著作,涵盖了Unix操作系统的核心概念、系统调用、进程管理、文件操作、网络通信等多个重要主题...
通过学习《UNIX高级编程》,程序员不仅可以掌握UNIX编程的核心技术,还能培养出系统级别的思维,从而能够设计和编写更高效、更稳定、更健壮的软件系统。无论是对初学者还是经验丰富的开发者,这都是一本极具价值的...
本书全面介绍了UNIX系统的程序设计界面—... 本书内容丰富权威,概念清晰精辟,一直以来被誉为UNIX编程的“圣经”,对于所有UNIX程序员—无论是初学者还是专家级人士—都是一本无价的参考书籍。 压缩包中是源代码。
《UNIX环境高级编程》是一本深受程序员喜爱的经典教程,它深入介绍了在UNIX操作系统环境下进行系统级编程的各种技术和方法。这本书不仅适用于C++开发者,也对任何想要深入理解UNIX系统的程序员都极具价值。以下是对...
本书全面深入地讲述了各种进程间通信(IPC)形式,它们是几乎所有复杂精致的UNIX程序的性能之关键。从网络编程角度看,理解IPC也是理解如何开发不同主机间网络应用程序的必要条件。本书从对Posix IPC和System V IPC...
笔记_UNIX环境网络编程卷二进程间通信_中文第二版
高级编程在Unix环境中意味着对系统调用、进程管理、文件系统、网络通信等核心概念有深入的理解。以下是一些关键的知识点: 1. **系统调用**:Unix提供了大量系统调用来进行进程控制、文件操作、内存管理等任务。如`...
《Unix环境高级编程》与《Unix网络编程:进程间通信》是两本在计算机科学领域具有深远影响力的经典著作。它们涵盖了Unix系统的核心概念和技术,对于理解操作系统原理、进行系统级编程以及深入研究网络通信有着不可...
- **POSIX标准**:提供了跨平台的UNIX编程接口,如pthread库用于线程编程。 通过深入学习和实践以上知识点,你将能够熟练地进行UNIX系统编程,开发出高效、稳定的应用程序。记得结合《UNIX系统编程》这样的参考...