linux标准库unistd.h
unistd.h是unix std的意思,是POSIX标准定义的unix类系统定义符号常量的头⽂件,
包含了许多UNIX系统服务的函数原型
unistd.h在unix中类似于window中的windows.h
#ifdef WIN32
#include <windows.h>
#el
#include <unistd.h>
#endif
许多在Linux下开发的C程序都需要头⽂件unistd.h,但VC中没有个头⽂件,
所以⽤VC编译总是报错。把下⾯的内容保存为unistd.h,可以解决这个问题。
/
** This file is part of the Mingw32 package.
* unistd.h maps (roughly) to io.h
*/
#ifndef _UNISTD_H
#define _UNISTD_H
#include <io.h>
#include <process.h>
#endif /* _UNISTD_H */
unistd.h含有的常量与函数:
ssize_t read(int, void *, size_t); // 读取⽂件使⽤
int unlink(const char *);
ssize_t write(int, const void *, size_t); // 写⽂件
int usleep(uconds_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 clo(int); // 关闭⽂件
size_t confstr(int, char *, size_t);
void _exit(int);
pid_t fork(void);
NULL // Null pointer
SEEK_CUR // Set file offt to current plus offt.
SEEK_END // Set file offt to EOF plus offt.
SEEK_SET // Set file offt to offt.
在进⾏堵塞式系统调⽤时,为避免进程陷⼊⽆限期的等待,能够为这些堵塞式系统调⽤设置定时器。Linux提供了alarm系统调⽤和SIGALRM信号实现这个功能。
要使⽤定时器,⾸先要安装SIGALRM信号。假设不安装SIGALRM信号,则进程收到SIGALRM信号后,缺省的动作就是终⽌当前进程。
SIGALRM信号成功安装后,在什么情况下进程会收到该信号呢?这就要依赖于Linux提供的定时器功能。在Linux系统下,每⼀个进程都有惟⼀的⼀个定时器,该定时器提供了以秒为单位的定时功能。在定时器设置的超时时间到达后,调⽤alarm的进程将收到SIGALRM信号。
void main()
{
//安装SIGALRM信号
if(signal(SIGALRM,CbSigAlrm)==SIG_ERR)
{
perror("signal");
return;
}
//关闭标准输出的⾏缓存模式
tbuf(stdout,NULL);
//启动定时器
alarm(1);
//进程进⼊⽆限循环,仅仅能⼿动终⽌
while(1)
{
//暂停,等待信号
pau();
}
}
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);
}