- 浏览: 63880 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
brxonline:
提示不能这样写234390216 写道234390216 写道 ...
mysql导出数据为excel -
234390216:
234390216 写道不行啊,错误
提示不能这样写
mysql导出数据为excel -
234390216:
不行啊,错误
mysql导出数据为excel
1.signal函数
#include <signal.h> void (*signal(int signo, void (*func)(int)))(int);
|
Returns: previous disposition of signal (see following) if OK, SIG_ERR on error |
一般可将signal函数的原型写成
Sigfunc *signal(int, Sigfunc *);
例:捕捉 SIGUSR1和SIGUSR2的简单程序
#include "apue.h" static void sig_usr(int); /* one handler for both signals */ int main(void) { if (signal(SIGUSR1, sig_usr) == SIG_ERR) err_sys("can't catch SIGUSR1"); if (signal(SIGUSR2, sig_usr) == SIG_ERR) err_sys("can't catch SIGUSR2"); for ( ; ; ) pause(); } static void sig_usr(int signo) /* argument is signal number */ { if (signo == SIGUSR1) printf("received SIGUSR1\n"); else if (signo == SIGUSR2) printf("received SIGUSR2\n"); else err_dump("received signal %d\n", signo); }
2.中断的系统调用
3.可重入函数
4.SIGCLD语义
5.kill和raise函数
#include <signal.h> int kill(pid_t pid, int signo); int raise(int signo);
|
Both return: 0 if OK, 1 on error |
调用raise(signo)等价于调用kill(getpid(), signo)
kill的pid参数有四种不同的情况
6.alarm和pause函数
#include <unistd.h>
unsigned int alarm(unsigned int seconds);
|
Returns: 0 or number of seconds until previously set alarm |
参数seconds的值是秒数,经过了指定的seconds秒后会产生信号SIGALRM
#include <unistd.h> int pause(void);
|
Returns: 1 with errno set to EINTR |
pause函数使调用进程挂起直至捕捉到一个信号
7.信号集
#include <signal.h> int sigemptyset(sigset_t *set); int sigfillset(sigset_t *set); int sigaddset(sigset_t *set, int signo); int sigdelset(sigset_t *set, int signo);
|
All four return: 0 if OK, 1 on error |
int sigismember(const sigset_t *set, int signo);
|
Returns: 1 if true, 0 if false, 1 on error |
8.sigprocmask函数
#include <signal.h> int sigprocmask(int how, const sigset_t *restrict set, sigset_t *restrict oset);
|
Returns: 0 if OK, 1 on error |
当oset非空,那么进程的当前信号屏蔽字通过oset返回
当set非空,参数how指示如何修改当前信号屏蔽字
SIG_BLOCK |
The new signal mask for the process is the union of its current signal mask and the signal set pointed to by set. That is, set contains the additional signals that we want to block. |
SIG_UNBLOCK |
The new signal mask for the process is the intersection of its current signal mask and the complement of the signal set pointed to by set. That is, set contains the signals that we want to unblock. |
SIG_SETMASK |
The new signal mask for the process is replaced by the value of the signal set pointed to by set. |
例:为进程打印信号屏蔽字
#include "apue.h" #include <errno.h> void pr_mask(const char *str) { sigset_t sigset; int errno_save; errno_save = errno; /* we can be called by signal handlers */ if (sigprocmask(0, NULL, &sigset) < 0) err_sys("sigprocmask error"); printf("%s", str); if (sigismember(&sigset, SIGINT)) printf("SIGINT "); if (sigismember(&sigset, SIGQUIT)) printf("SIGQUIT "); if (sigismember(&sigset, SIGUSR1)) printf("SIGUSR1 "); if (sigismember(&sigset, SIGALRM)) printf("SIGALRM "); /* remaining signals can go here */ printf("\n"); errno = errno_save; }
9.sigpending函数
#include <signal.h>
int sigpending(sigset_t *set);
|
Returns: 0 if OK, 1 on error |
例:信号设置和sigprocmask实例
#include "apue.h" static void sig_quit(int); int main(void) { sigset_t newmask, oldmask, pendmask; if (signal(SIGQUIT, sig_quit) == SIG_ERR) err_sys("can't catch SIGQUIT"); /* * Block SIGQUIT and save current signal mask. */ sigemptyset(&newmask); sigaddset(&newmask, SIGQUIT); if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0) err_sys("SIG_BLOCK error"); sleep(5); /* SIGQUIT here will remain pending */ if (sigpending(&pendmask) < 0) err_sys("sigpending error"); if (sigismember(&pendmask, SIGQUIT)) printf("\nSIGQUIT pending\n"); /* * Reset signal mask which unblocks SIGQUIT. */ if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0) err_sys("SIG_SETMASK error"); printf("SIGQUIT unblocked\n"); sleep(5); /* SIGQUIT here will terminate with core file */ exit(0); } static void sig_quit(int signo) { printf("caught SIGQUIT\n"); if (signal(SIGQUIT, SIG_DFL) == SIG_ERR) err_sys("can't reset SIGQUIT"); }
10.sigaction函数
#include <signal.h> int sigaction(int signo, const struct sigaction *restrict act, struct sigaction *restrict oact);
|
Returns: 0 if OK, 1 on error |
struct sigaction {
void (*sa_handler)(int); /* addr of signal handler, */
/* or SIG_IGN, or SIG_DFL */
sigset_t sa_mask; /* additional signals to block */
int sa_flags; /* signal options, Figure 10.16 */
/* alternate handler */
void (*sa_sigaction)(int, siginfo_t *, void *);
};
11.sigsetjmp和siglongjmp函数
#include <setjmp.h> int sigsetjmp(sigjmp_buf env, int savemask);
|
Returns: 0 if called directly, nonzero if returning from a call to siglongjmp |
void siglongjmp(sigjmp_buf env, int val); |
12.sigsuspend函数
#include <signal.h>
int sigsuspend(const sigset_t *sigmask);
|
Returns: 1 with errno set to EINTR |
13.abort函数
#include <stdlib.h> void abort(void);
|
This function never returns |
14.system函数
15.sleep函数
#include <unistd.h>
unsigned int sleep(unsigned int seconds);
|
Returns: 0 or number of unslept seconds |
16.其他函数
#include <signal.h> void psignal(int signo, const char *msg);
|
#include <string.h>
char *strsignal(int signo);
|
Returns: a pointer to a string describing the signal |
#include <signal.h> int sig2str(int signo, char *str); int str2sig(const char *str, int *signop);
|
Both return: 0 if OK, 1 on error |
发表评论
-
UNIX网络编程(1)-简介
2011-10-06 17:31 7911.bzero函数 bzero 等同于memset(void ... -
UNIX编程(15)-进程间通信
2011-08-07 12:09 1121. 管道 #include <un ... -
UNIX编程(14)-高级IO
2011-08-03 21:36 14161.非阻塞IO 对于一个给定的描述符有两种方法对其指定非阻塞 ... -
UNIX编程(13)-守护进程
2011-08-02 21:59 9591.守护进程的编程规则 1)用umask将文件模式创建屏蔽字 ... -
UNIX编程(12)-线程控制
2011-07-27 15:26 9451.线程限制 某些系统有线程的限制,可以通过sysconf函 ... -
UNIX编程(11)-线程
2011-07-27 14:34 9801.线程标识 每个线程都有一个线程ID,线程ID只在它所属的 ... -
UNIX编程(9)-进程关系
2011-07-12 14:41 11521.终端登录 2.网络登录 3.进程组 ... -
UNIX编程(8)-进程控制
2011-07-09 11:37 12031.进程标识符 每个进程 ... -
UNIX编程(7)-进程环境
2011-07-01 15:07 9031.main 函数 c程序总是从main函数开始执行,当内核 ... -
UNIX编程(6)-系统数据文件和信息
2011-06-28 16:35 11961.口令文件 口令文件存储在/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 8381.登陆名 登陆名放在/etc ...
相关推荐
《Unix编程艺术》是一本深度探讨Unix操作系统编程的权威之作,由著名的计算机科学家Eric S. Raymond撰写。这本书全面覆盖了Unix编程的各种技术和实践,旨在帮助读者理解和掌握Unix系统的精髓,从而提升软件开发的...
在Linux/UNIX环境中,信号自早期版本起就被引入,并随着时间的推移逐渐演变为可靠的通信手段,尽管在不同的实现中存在一些不兼容性,但POSIX.1标准的制定统一了可靠信号的处理。 信号的机制类似于硬件中断,但它们...
通过学习《UNIX高级编程》,程序员不仅可以掌握UNIX编程的核心技术,还能培养出系统级别的思维,从而能够设计和编写更高效、更稳定、更健壮的软件系统。无论是对初学者还是经验丰富的开发者,这都是一本极具价值的...
- **POSIX标准**:提供了跨平台的UNIX编程接口,如pthread库用于线程编程。 通过深入学习和实践以上知识点,你将能够熟练地进行UNIX系统编程,开发出高效、稳定的应用程序。记得结合《UNIX系统编程》这样的参考...
《UNIX网络编程——第一卷——套接口API》是网络编程领域的经典之作,尤其在UNIX操作系统环境下,这本书被视为不可或缺的学习资源。作者深入浅出地讲解了网络通信的基础理论和实际操作,帮助开发者理解如何利用套...
《UNIX环境高级编程》是一本深受程序员和系统管理员喜爱的经典之作,主要针对那些希望深入理解UNIX操作系统,并能熟练进行...无论是自学还是作为参考手册,这本书及其相关资料都能为你的UNIX编程之路提供强大的支持。
《Unix编程艺术》、《Unix环境高级编程(第二版)》和《Unix网络编程(第二版)》是三本在IT领域中具有深远影响力的经典著作,涵盖了Unix操作系统的核心概念、系统调用、进程管理、文件操作、网络通信等多个重要主题...
《UNIX网络编程-第2卷-进程间通讯》是一本深入探讨UNIX系统中进程间通信(Inter-Process Communication, IPC)的经典著作。该书详细阐述了如何在多进程环境中实现有效的数据交换,这对于理解操作系统原理、开发高效...
《UNIX环境高级编程》是一本深受程序员喜爱的经典教程,它深入介绍了在UNIX操作系统环境下进行系统级编程的各种技术和方法。这本书不仅适用于C++开发者,也对任何想要深入理解UNIX系统的程序员都极具价值。以下是对...
10. **Shell脚本编程**:Unix shell不仅是一个命令解释器,还是编写自动化任务的强大工具。掌握bash或其他shell的语法和特性,能提升开发效率。 《Unix环境高级编程》一书详细讲解了以上所有内容,通过阅读和实践,...
《QNX-UNIX-POSIX-C函数手册》是一份针对编程初学者的宝贵资源,尤其适合那些在Linux环境中使用C语言进行开发的程序员。这份手册详细介绍了C语言标准库以及与QNX、UNIX和POSIX操作系统相关的扩展函数,旨在帮助...
根据提供的标题“Unix编程艺术中文版(非加密,带目录)”及描述“Unix编程艺术中文版”,可以推测这是一本介绍Unix系统编程原理、技巧和最佳实践的书籍。本书可能涵盖Unix系统的背景知识、核心概念、编程工具和技术...
UNIX系统以其稳定、高效和强大的命令行接口而著名,对于系统管理员和高级程序员来说,深入理解和掌握UNIX的高级编程技巧至关重要。"UNIX高级编程18-20(大师著作)"这部分内容可能涵盖了以下几个关键知识点: 1. **...
《UNIX环境高级编程》是一本经典的UNIX系统编程指南,由W. Richard Stevens撰写,它深入讲解了在UNIX系统上进行程序开发的各种高级技术。这本书涵盖了从进程管理、文件I/O到网络通信等广泛的编程主题,是许多软件...
UNIX系统编程手册-上.((德)Michael Kerrisk )一本linux开发比较全和权威的书籍分上下册
在IT领域,Shell编程和UNIX命令是不可或缺的基础技能,尤其对于系统管理员、开发者以及...这个名为“shell编程和UNIX命令1-10”的压缩包可能包含一系列教程或练习,建议按照顺序逐一学习,通过实际操作来巩固理论知识。
"UNIX高级编程21-23(大师著作)"这个压缩包文件包含了三部分关于这一主题的深度学习资料,分别命名为022.PDF、021.PDF、023.PDF,这些PDF文件很可能是从一本经典的UNIX编程书籍中提取的章节。 UNIX高级编程涵盖了...
第十六章和第十七章可能进一步探讨Shell编程的高级主题,如进程控制(子进程、后台进程)、信号处理,甚至可能涉及到正则表达式和文本处理工具的使用,如grep、sed和awk,这些都是Linux和Unix系统中强大的文本操作...
Linux/UNIX系统编程是计算机科学领域中的一项核心技术,它主要涉及使用C语言对Linux或UNIX系统提供的底层接口进行操作。系统编程允许开发者执行诸如进程控制、文件操作、信号处理、进程间通信(IPC)以及网络编程等...