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

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);
}

原文地址:https://www.cnblogs.com/pjl1119/p/9922469.html

时间: 2024-08-30 04:56:45

unistd.h的相关文章

在VC下如何使用头文件unistd.h

头文件unistd.h是Linux/Unix的系统调用,包含了许多UNIX系统服务函数原型,如open.read.write._exit.getpid等函数.在linux下能够编译通过的包含此头文件的程序,在VC下编译时出现了如下问题 fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory 其实解决这个问题的方法并不难,只要在你的默认库文件夹下(我的电脑是D:\Program Files

unistd.h文件

转载地址:http://baike.baidu.com/link?url=nEyMMFYevs4yoHgQUs2bcfd5WApHUKx0b1ervi7ulR09YhtqC4txmvL1Ce3FS8xTKtWQuvmEBHC9xezMGpvGHa unistd.h 是 C 和 C++ 程序设计语言中提供对 POSIX 操作系统 API 的访问功能的头文件的名称.该头文件由 POSIX.1 标准(单一UNIX规范的基础)提出,故所有遵循该标准的操作系统和编译器均应提供该头文件(如 Unix 的所有

#include&lt;unistd.h&gt;存在linux中,含有系统服务的函数

#include<unistd.h> linux标准库#include <unistd.h>与windows的#include <windows.h>(C语言开发) #include    <unistd.h> 符号常量 是POSIX标准定义的unix类系统定义符号常量的头文件,包含了许多UNIX系统服务的函数原型,例如read函数.write函数和getpid函数unistd.h在unix中类似于window中的windows.h! #ifdef WIN3

#include &lt;unistd.h&gt; 的作用

原文:http://blog.csdn.net/ybsun2010/article/details/24832113 由字面意思,unistd.h是unix std的意思,是POSIX标准定义的unix类系统定义符号常量的头文件, 包含了许多UNIX系统服务的函数原型,例如read函数.write函数和getpid函数. 参考自 http://hi.baidu.com/w_dalu/item/e8d29860374ae02369105b11 unistd.h在unix中类似于window中的wi

Microsoft Visual Studio下编译缺少头文件unistd.h解决办法

问题 使用Visual Studio 2012在Win7下编译一个来自于Linux平台的源文件时,要求使用头文件uninstd.h,报错: fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory 解决办法 对于VS2012来说,我们可以在默认库文件夹下(我的电脑是C:\Program Files\Microsoft Visual Studio 10.0\VC\include)添加一个un

Python 安装zbar-py时出现 无法打开包括文件: “unistd.h” no such file or directory

问题 途中使用的命令是cl.exe,在执行命令的时候找不到对应的unistd.h文件. unistd.h是Unix系统的文件,因此,十有八九,使用的是Windows系统.下面的代码可以修复,但是如果修复了unistd.h,很大概率你还会有更多个*.h文件找不到.劝退. 解决 找到这个编译器所在的文件夹的include文件夹,并且unistd.h文件复制进去即可.可以新建一个文本文件,把名字和后缀名改为unistd.h. #ifndef _UNISTD_H #define _UNISTD_H 1

arpa/inet.h所引起的Segmentation fault及网络编程常见的头文件

最近在学习Linux网络编程方面的知识,感觉还是有些困难.主要是对协议过程的理解,还有socket的API的理解不够深刻.今天复习编写了一个TCP的服务端和客户端的程序实现client.c从命令行参数中获得一个字符串发给服务器,然后接收服务器返回的已处理的字符串并打印. server.c 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <unistd.h>

(笔记)Linux下的准确延时,#include &lt;linux/delay.h&gt;调用出错

在编写应用层程序时,有时需要延时一下,这个时候该怎么办呢? 在内核代码中,我们经常会看到这样的头文件使用#include <linux/delay.h>,心想着直接调用这个就可以了吧!可是在编译时发现,压根通不过, 提示错误如下:error: No such file or directory. 是不是觉得很奇怪,明明文件是存在的,怎么就不能调用了,而且内核很多文件调用得很欢.这是为什么呢? 因为内核程序跟应用程序是有区别的,有些特殊的内核头文件编译器不允许被应用程序调用.故编译应用程序使用内

H.264远程视频监控系统

由usb摄像头驱动,h264编码库,采集read_video,传输,客户端显示组成 读取摄像头数据缓冲区是否有帧数据收到,有数据收到就读取数据并进行H264编码,把数据发送到socket发送到客户端. 配置内核:make menuconfig ARCH=arm, 选择gerneral setup-->multimedia devices-->device drivers-->multimedia devices-->video capture adapters-->V4L U