linux标准库unistd.h

2023-11-04

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

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux标准库unistd.h 的相关文章

随机推荐

  • [Java基础]ArrayList的contains方法,你用对了吗?

    最近在代码Review中发现 有同学错用了数组的contains方法 示例如下 public class ListItem private int id private String name public ListItem int id
  • for循环多个条件

  • 百度搜索中url的参数解析

    转载请注明 藏羚骸的博客 百度搜索中url的参数解析 小伙伴们在写爬虫程序的时候 可能会用到部分参数使用 这里整理了 百度搜索中url的参数解析 免费查询快递物流 wd 查询的关键词 pn 已显示的结果条数 即当前页从pn条记录开始显示 该
  • 轮询调度算法(Round-Robin Scheduling)

    轮询调度算法 Round Robin Scheduling 毫无疑问 随着互联网 移动网络接入成本的降低 互联网正在日益深入地走入我们的生活 越来越成为人们获取信息的高效平台 ICP行业也顺势呈现出强劲的成长趋势 成为互联网迅猛发展形势下最
  • 服务器被ddos攻击了怎么处理

    服务器被DDOS攻击是很常见的事情 但对于网站管理员来说 这可能是一件非常麻烦的事情 那么 当服务器被DDOS攻击时 我们应该怎么处理呢 第一步 尽快确定服务器是否真的被DDOS攻击了 可以使用网站监控工具或者联系服务器提供商确认情况 第二
  • RSA 加密算法原理简述

    概述 本文旨在说明RSA加密算法的原理及实现 而其相关的数学部分的证明则不是本文内容 版权说明 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 作者 Q WHai 发表日期 2016年2月29日 本文链接 http bl
  • MySQL5.7版本安装配置教程(超级详细)

    一 下载MySQL Mysql官网下载地址 MySQL Download MySQL Installer Archived Versions 选择要安装的版本 本篇文章选择的是5 7 31版本 点击Download下载 二 安装MySQL
  • 国内电脑行业数据浅析

    大家好 这里是小安说网控 信息时代 电脑成了办公标配 但受经济环境与疫情的双重影响 电脑行业整体情况不算理想 2022年1 8月 我国电脑行业累计产量29267 7万台 同比减少6 1 不仅产量 销量也有所下降 据Canalys发布的调研报
  • 多线程学习之线程生命周期

    线程生命周期中 线程状态切换关系如下图 线程各个状态直接切换说明 new Thread至Runnable状态 调用thread的start方法进入Runnable状态 但是现在线程并没有运行 相当于一个thread对象放到了内存中 等待调度
  • 实现数据导入+导入模式+导入案列

    导入模式 模式 参数 说明 操作角色 full full 导入整个数据库 imp full database schema schmas 导入用户模式中的数据和元数据 imp full database table tables 导入表和表
  • 三线调速风扇原理_风机盘管的工作原理和检修方法

    风机盘管是中央空调中典型的末端产品 主要是利用风扇组件作用 使空气与盘管中的冷水或热水进行热交换 并将降温或升温后的空气输出 风机盘管的封装形式有所不同 可以根据不同的需求选择不同的封装形式进行安装 比较常见的有吊顶暗装风机盘管 吊顶明装风
  • 2022mpsPTE岗位笔试题

    2022年9月完成了PTE岗位的笔试 并通过了 浅浅的还有一点印象 之前有朋友也想来 就放在这里 供需要的朋友看 前两个题是关于C语言的 语言不限 C 也可 一个是输出2到100偶数之和 主要就是调用for循环 一个是输入一个数 输出这个数
  • SpringCloud集成Nacos并使用

    摘要 今天分享下 SpringCloud 集成 Nacos 并使用 的一些基本知识 欢迎关注 欢迎阅读 总结系列 SpringCloudAlibaba 实战搭建 项目父模块 pom xml 配置
  • lgb(lightgbm)处理类别特征遇到的问题(泰坦尼克):

    1 lgb lightgbm 处理类别特征遇到的问题 ValueError DataFrame dtypes for data must be int float or bool Did not expect the data types
  • windows下使用vscode远程连接Linux服务器进行开发

    windows下使用vscode远程连接Linux服务器进行开发 一 安装远程开发插件Remote Development 1 在商店中搜索 Remote Development 并安装 2 选择SSH Targets 3 新建远程连接 4
  • mysql 数据类型

    1 整数类型 TINYINT SMALLINT MEDIUMINT INT BIGINT 分别使用 8 16 24 32 64位存储空间 存储范围是 2的 n 1 次方到2的 n 1 次方 1 其中n是存储空间位数 unsigned属性不允
  • 如何在uni-app正确使用web-view

    可以定义一个内部页面 就只放一个web view 然后在列表点击的时候 跳转到该内部页面 并且把需要打开的链接传递到该页面
  • vector::erase() vector中如何删除元素?

    vector erase 从指定容器删除指定位置的元素或某段范围内的元素 vector erase 方法有两种重载形式 如下 1 iterator erase iterator Where v1 erase v1 begin 删除v1中的第
  • MongDB解决Authentication Failed导致的不能连接问题

    MongoDB的安装 Step1 打开MongoDB产品下载页面https www mongodb com download center jmp nav community 选择Windows Server 2008 R2 64 bit
  • linux标准库unistd.h

    unistd h是unix std的意思 是POSIX标准定义的unix类系统定义符号常量的头文件 包含了许多UNIX系统服务的函数原型 unistd h在unix中类似于window中的windows h ifdef WIN32 incl