linux标准库unistd.h

unistd.h是unix std的意思,是POSIX标准定义的unix类系统定义符号常量的头文件

包含了许多UNIX系统服务的函数原型

unistd.h在unix中类似于window中的windows.h

 

#ifdef WIN32
#include <windows.h>
#else
#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(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);
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值