【Linux系统编程】Linux的系统库中的unistd.h头文件的作用

在Linux系统中,unistd.h是一个头文件,提供了许多与系统调用和底层操作有关的函数、常量和类型的声明。这个头文件包含了许多对于操作系统接口访问的重要功能,通常被用于系统级编程和系统管理任务。

unistd.h头文件主要用于与POSIX标准相关的系统调用和函数,POSIX(Portable Operating System Interface for Unix)是一组定义了UNIX-like操作系统接口标准的规范,旨在增加移植性和兼容性。

以下是unistd.h头文件中一些常用函数和常量的示例:

1. 系统调用:
unistd.h头文件中定义了许多系统调用的函数原型,如:

  • fork():创建一个子进程的副本。
  • exec*():用于在当前进程上执行一个新的程序。
  • wait():等待子进程结束。
  • getpid():获取当前进程的进程ID。
  • getppid():获取当前进程的父进程ID。
  • chdir():改变当前工作目录。

2. 文件操作:
unistd.h中也包含了一些文件操作相关的函数,如:

  • open():打开文件。
  • close():关闭文件描述符。
  • read():从文件描述符读取数据。
  • write():向文件描述符写入数据。

3. 系统信息:
unistd.h中还包含了一些与系统信息相关的函数,如:

  • gethostname():获取主机名。
  • sysconf():获取系统配置信息。

4. 系统常量:
unistd.h中定义了一些常用的系统常量,如文件访问权限标志(O_RDONLYO_WRONLYO_RDWR)、文件执行权限(S_IRUSRS_IWUSRS_IXUSR)等。

unistd.h头文件对于编写需要与操作系统底层交互的C/C++程序非常重要。它允许程序员直接与操作系统进行交互,执行底层任务,访问文件和目录,执行系统调用等操作。这些功能使得Linux上的系统级编程和系统管理任务更加便捷和灵活。

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译 ./configure --prefix=/usr/local/php --exec-prefix=/usr/local/php --bindir=/usr/local/php/bin --sbindir=/usr/local/php/sbin --includedir=/usr/local/php/include --libdir=/usr/local/php/lib/php --mandir=/usr/local/php/php/man --with-config-file-path=/usr/local/php/etc --with-mysql-sock=/var/run/mysql/mysql.sock --with-mcrypt=/usr /i nclude --with-mhash --with-openssl --with-mysql=shared,mysqlnd --with-mysqli=shared,mysqlnd --with-pdo-mysql=shared,mysqlnd --with-gd --with-iconv --with-zlib --enable-zip --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-mbregex --enable-mbstring --enable-ftp --enable-gd-native-ttf --enable-pcntl --enable-sockets --with-xmlrpc --enable-soap --without-pear --with-gettext --enable-session --with-curl --with-jpeg-dir --with-freetype-dir --enable-opcache --enable-fpm --enable-fastcgi --with-fpm-user=www --with-fpm-group=www --without-gdbm --with-mcrypt=/usr/local/apps/libmcrypt --disable-fileinfo 报错:1, **configure: error: system libzip must be upgraded to version >=**0.11。 使用Yum最新版只到0.10,不足以达到要求。 一、先删除libzip yum remove libzip -y SSH执行以上命令,先删除libzip 和 libzip-devel 二、下载安装并手动编译 wget https://nih.at/libzip/libzip-1.2.0.tar.gz tar -zxvf libzip-1.2.0.tar.gz cd libzip-1.2.0 ./configure make && make install 三、(可忽略)另外最新版本请参考官网:https://nih.at/libzip/ 1.5.0的libzip需要cmake wget https://libzip.org/download/libzip-1.5.0.tar.gz tar -zxvf libzip-* cd libzip* mkdir build && cd build && cmake .. && make && make install 报错2: error: off_t undefined; check your library configuration 根据报错信息分析 configure: error: off_t undefined; check your library configuration 未定义的类型 off_t。 off_t 类型是在 头文件 unistd.h中定义的,在32位系统 编程成 long int ,64位系统则编译成 long long int ,这里题主的系统应该是 64位的吧,在进行编译的时候 是默认查找64位的动态链接库,但是默认情况下 centos 的动态链接库配置文件/etc/ld.so.conf里并没有加入搜索路径,这个时候需要将 /usr/local/lib64 /usr/lib64 这些针对64位的库文件路径加进去。 采用下面的方法。 添加搜索路径到配置文件 echo '/usr/local/lib64 /usr/local/lib /usr/lib /usr/lib64'>>/etc/ld.so.conf 然后 更新配置 ldconfig -v 再次执行 编译 成功 执行安装: make && make install 报错: /usr/local/include/zip.h:59:21: fatal error: zipconf.h: No such file or directory 解决: cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h 1 安装成功: 复制配置文件: cp php.ini-production /usr/local/php/lib/php.ini cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf ln -s /usr/local/php/sbin/php-fpm /usr/local/bin 修改配置: cd /usr/local/php/etc/php-fpm.d vim www.conf [www] //池子名 (pool) 设置 ;listen = /tmp/php-fcgi.sock // 监听的地址,可以监听socket ,也可以监听端口 listen = 127.0.0.1:8089 或者这样写,php-fpm 通常在本地使用,php和nginx 通常在一台机器,所以可写127.0.0.1,别的机器 连接,需用本机ip listen.mode = 666 //sock 文件的权限 listen.owner = nobody listen.group = nobody user = php-fpm group = php-fpm pm = dynamic pm.max_children = 50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500 rlimit_files = 1024 加入 systemtl 服务: cd /usr/local/src/php-7.3.0beta1/sapi/fpm cp php-fpm.service /usr/lib/systemd/system/ 启动: systemctl start php-fpm systemctl status php-fpm -l
编译 ./configure --prefix=/usr/local/php --exec-prefix=/usr/local/php --bindir=/usr/local/php/bin --sbindir=/usr/local/php/sbin --includedir=/usr/local/php/include --libdir=/usr/local/php/lib/php --mandir=/usr/local/php/php/man --with-config-file-path=/usr/local/php/etc --with-mysql-sock=/var/run/mysql/mysql.sock --with-mcrypt=/usr /include --with-mhash --with-openssl --with-mysql=shared,mysqlnd --with-mysqli=shared,mysqlnd --with-pdo-mysql=shared,mysqlnd --with-gd --with-iconv --with-zlib --enable-zip --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-mbregex --enable-mbstring --enable-ftp --enable-gd-native-ttf --enable-pcntl --enable-sockets --with-xmlrpc --enable-soap --without-pear --with-gettext --enable-session --with-curl --with-jpeg-dir --with-freetype-dir --enable-opcache --enable-fpm --enable-fastcgi --with-fpm-user=www --with-fpm-group=www --without-gdbm --with-mcrypt=/usr/local/apps/libmcrypt --disable-fileinfo 报错:1, **configure: error: system libzip must be upgraded to version >=**0.11。 使用Yum最新版只到0.10,不足以达到要求。 一、先删除libzip yum remove libzip -y SSH执行以上命令,先删除libzip 和 libzip-devel 二、下载安装并手动编译 wget https://nih.at/libzip/libzip-1.2.0.tar.gz tar -zxvf libzip-1.2.0.tar.gz cd libzip-1.2.0 ./configure make && make install 三、(可忽略)另外最新版本请参考官网:https://nih.at/libzip/ 1.5.0的libzip需要cmake wget https://libzip.org/download/libzip-1.5.0.tar.gz tar -zxvf libzip-* cd libzip* mkdir build && cd build && cmake .. && make && make install 报错2: error: off_t undefined; check your library configuration 根据报错信息分析 configure: error: off_t undefined; check your library configuration 未定义的类型 off_t。 off_t 类型是在 头文件 unistd.h中定义的,在32位系统 编程成 long int ,64位系统则编译成 long long int ,这里题主的系统应该是 64位的吧,在进行编译的时候 是默认查找64位的动态链接库,但是默认情况下 centos 的动态链接库配置文件/etc/ld.so.conf里并没有加入搜索路径,这个时候需要将 /usr/local/lib64 /usr/lib64 这些针对64位的库文件路径加进去。 采用下面的方法。 添加搜索路径到配置文件 echo '/usr/local/lib64 /usr/local/lib /usr/lib /usr/lib64'>>/etc/ld.so.conf 然后 更新配置 ldconfig -v 再次执行 编译 成功 执行安装: make && make install 报错: /usr/local/include/zip.h:59:21: fatal error: zipconf.h: No such file or directory 解决: cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h 1 安装成功: 复制配置文件: cp php.ini-production /usr/local/php/lib/php.ini cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf ln -s /usr/local/php/sbin/php-fpm /usr/local/bin 修改配置: cd /usr/local/php/etc/php-fpm.d vim www.conf [www] //池子名 (pool) 设置 ;listen = /tmp/php-fcgi.sock // 监听的地址,可以监听socket ,也可以监听端口 listen = 127.0.0.1:8089 或者这样写,php-fpm 通常在本地使用,php和nginx 通常在一台机器,所以可写127.0.0.1,别的机器 连接,需用本机ip listen.mode = 666 //sock 文件的权限 listen.owner = nobody listen.group = nobody user = php-fpm group = php-fpm pm = dynamic pm.max_children = 50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500 rlimit_files = 1024 加入 systemtl 服务: cd /usr/local/src/php-7.3.0beta1/sapi/fpm cp php-fpm.service /usr/lib/systemd/system/ 启动: systemctl start php-fpm systemctl status php-fpm -l
### 回答1: unistd.h头文件是C语言的标准库之一,主要包含了一些跨平台的系统调用函数原型,这些函数可以处理各种与系统交互相关的操作,例如进程控制、文件操作、命令行参数等。该头文件通常应用于Unix与类Unix系统中,为编写高效、可移植的系统程序提供便利。 unistd.h中最为重要的函数是fork()和exec(),它们共同构成了Unix/Linux操作系统中进程的基本模型。fork()函数可以复制自身进程,即父进程生成一个子进程,子进程是父进程的副本,两个进程几乎完全相同,但各自有唯一的进程ID,其主要作用是提高程序的并发能力和可靠性。而exec()函数则用于在当前进程上运行新的程序或脚本,这是Unix/Linux系统中进程替换的基础操作。 除此之外,unistd.h还包含了一些与进程、文件相关的基本函数,例如getpid()用于获取当前进程的进程ID,kill()用于向指定进程发送信号,access()用于检查文件是否存在且有权限等等。通过使用该头文件中的函数,程序员可以方便地进行操作系统层面的编程,更加灵活地进行系统开发和维护。 ### 回答2: unistd.h头文件是C语言中的一个头文件,主要包含了一些UNIX系统函数的声明和宏定义,可以在UNIX系统中使用。 该头文件内包含了一些对进程控制、文件描述符、系统调用等的函数声明,比如fork()函数用于创建子进程,exec()函数用于执行程序,exit()函数用于结束当前进程等等。此外,它还定义了一些有关文件和目录的常量和函数,如access()函数用于检查文件或目录的访问权限、chdir()函数用于修改当前工作目录、chown()函数用于更改文件或目录的所有者等等。 在编写UNIX系统相关的程序时,使用unistd.h头文件中的函数和常量可以方便我们进行进程管理、文件操作和系统调用等操作,是编写UNIX系统程序的基础之一。 ### 回答3: unistd.h是一个Linux/Unix系统下常用的C语言头文件,该文件中定义了许多与系统调用和C库函数相关的函数和常量。 在该头文件中,部分重要的函数包括exec系列函数、fork函数、getpid函数、chdir函数、access函数、pipe函数、close函数、read函数、write函数、dup函数、getcwd函数等。这些函数相应地实现了执行程序、创建子进程、获取进程ID、改变当前工作目录、检查文件访问权限、创建管道、关闭文件描述符、从文件中读取数据、往文件中写入数据、复制文件描述符和获取当前工作目录等操作。 此外,unistd.h还定义了一些常量如STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO代表标准输入、标准输出和标准错误描述符的文件号,以及宏符号_POSIX_VERSION、_POSIX_ARG_MAX、_SC_OPEN_MAX等。 总之,unistd.h头文件提供了一个C程序的底层访问接口,使程序员能够操作底层文件、进程和IO资源。因此,在Linux/Unix编程中,该头文件非常重要。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值