unistd.h是unix std的意思,是POSIX标准定义的unix类系统定义符号常量的头文件,
包含了许多UNIX系统服务的函数原型
unistd.h在unix中类似于window中的windows.h!
#ifdef WIN32 #include <windows.h> #else #include <unistd.h> #endif
unistd.h含有的常量与函数:
ssize_t read(int, void *, size_t); // 读取文件使用 int unlink(const char *); ssize_t write(int, const void *, size_t); // 写文件 int usleep(useconds_t); // 进程休眠,单位为微妙 unsigned sleep(unsigned); // 进程休眠,单位为秒 int access(const char *, int); // 获取文件的权限 unsigned alarm(unsigned); int chdir(const char *); int chown(const char *, uid_t, gid_t); int close(int); // 关闭文件 size_t confstr(int, char *, size_t); void _exit(int); pid_t fork(void); NULL // Null pointer SEEK_CUR // Set file offset to current plus offset. SEEK_END // Set file offset to EOF plus offset. SEEK_SET // Set file offset to offset.
在进行堵塞式系统调用时。为避免进程陷入无限期的等待,能够为这些堵塞式系统调用设置定时器。Linux提供了alarm系统调用和SIGALRM信号实现这个功能。
要使用定时器。首先要安装SIGALRM信号。假设不安装SIGALRM信号,则进程收到SIGALRM信号后。缺省的动作就是终止当前进程。
SIGALRM信号成功安装后,在什么情况下进程会收到该信号呢?这就要依赖于Linux提供的定时器功能。在Linux系统下,每一个进程都有惟一的一个定时器,该定时器提供了以秒为单位的定时功能。在定时器设置的超时时间到达后,调用alarm的进程将收到SIGALRM信号。
void main() { //安装SIGALRM信号 if(signal(SIGALRM,CbSigAlrm)==SIG_ERR) { perror("signal"); return; } //关闭标准输出的行缓存模式 setbuf(stdout,NULL); //启动定时器 alarm(1); //进程进入无限循环,仅仅能手动终止 while(1) { //暂停,等待信号 pause(); } }
alarm函数的使用:
#include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <signal.h> static int flag = 0; void handle(int signum){ printf("hello world %d\n", flag++); alarm(1); } int main() { alarm(1); signal(SIGALRM, handle); while(1); }