UNIX环境高级编程学习笔记
文章平均质量分 69
zl_1719828096
钢铁般的意志
展开
-
C语言宏定义#define中##是什么意思
如果替换文本中的参数用 (##)相连,那么参数就被实际变元替换, (##)与前后的空白符被删除,并对替换后的结果重新扫描。操作符(##),有时称为“合并”操作符,用于类对象宏和类函数宏。它允许将单独的标记加入到单个标记中,因此不能是宏定义中的第一个或最后一个标记。(##)为宏扩展提供了一种连接实际变元的手段。比如宏定义中的形式参数前面或后面有标记粘贴运算符,则形式参数将立即替换为未展开的实际参数。替换之前,不会对参数执行宏展开。eg:#define __SOCKADDR_COMMON(sa_prefix)原创 2022-06-08 12:20:11 · 833 阅读 · 1 评论 -
UNIX系统中原子操作
1、I/O的效率#include <stdio.h>#include <unistd.h>#include <stdlib.h>#define BUFFSIZE 4096int main(void){ int n; char buf[BUFFSIZE]; while((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0) if (write(STDOUT_FILENO, buf, n) != n)原创 2022-01-04 09:15:25 · 268 阅读 · 0 评论 -
UNIX高级环境编程之文件I/O
1、文件描述符对于现有内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。当打开一个现有文件或创建一个新文件,内核向进程返回一个文件描述符。当读、写一个文件时,使用open或creat返回的文件描述符标识该文件,将其作为参数传递给read或write。UNIX系统shell把文件描述符0与进程的标准输入关联,文件描述符1与标准输出关联,文件描述符2与标准出错关联。各种shell都是这么做的,与内核无关!!!尽管如此,如果不遵循这种惯例,很多UNIX系统应用就不能正常工...原创 2021-12-30 12:04:15 · 426 阅读 · 0 评论 -
UNIX系统实现中的限制
unix系统实现定义了很多幻数和常量,其中有很多已被硬编码到程序中,或用特定的技术确定。由于大量标准化工作的努力,已有若干种可移植的方法用以确定这些幻数和具体的实现定义的限制。这非常有助于改善unix环境下的软件的可移植性。 以下两种类型的限制是必须的: (1)编译时限制(eg:短整型的最大值是什么?) (2)运行时限制(eg:文件名有多少个字符?) 编译时限制可在头文件中定义。程序在编译...原创 2021-12-28 18:01:10 · 847 阅读 · 0 评论