首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

编程语言Zig有什么与众不同

作者 | Erik Engheim 译者 | 马可薇 策划 | Tina Zig 允许在编译期执行代码,这有什么意义?...Zig 吉祥物“零号(Zero the Ziguana)” 编程语言专家曾对 Zig 编程语言创造者 Andrew Kelley 说,在编译时运行代码是个蠢主意。...Zig 可以在编译时运行代码能力让开发者们可以在不明确任何泛型或模板支撑情况下,编写通用代码或是进行元编程。让我们来通过代码例子更直观地了解编译时运行是什么意思,以及其为什么重要。...在 maximum 函数在被调用时,将默认 anytype 为提供参数类型。请注意,Zig 不是动态编程语言,在用不同参数类型调用 maximum 时,Zig 编译情况也会不同。...编译器会根据每次 maximum 调用创建不同变体,对不同输入类型和输出类型进行编译。 用编译时代码实现泛型 Zig 中 comptime 强大可以通过对泛型实现来证明。

3.2K20

linux内核编程_linux内核是什么

什么是操作系统? 指在系统中负责完成最基本功能和系统管理部分, 操作系统有哪些组成部分?...内核——操作系统内在核心 设备驱动程序 启动引导程序 命令行shell 其他种类用户界面—-操作系统外在表象 基本文件管理工具和系统工具 Linux内核组成 Linux内核源代码目录结构是什么...进程调度处于系统中心位置,内核中其他系统都依赖它,因为每个子系统都需要挂起或恢复进程 进程如何在几个状态间切换? 在设备驱动编程中,当请求资源不能得到满足时会怎样?...Linux 每个进程享有4GB内存空间,0~3GB属于用户空间,3~4GB属于内核空间 虚拟文件系统什么作用?...LinuxC 编程 Linux中宏定义、变量名、函数名命名习惯是什么

18.8K30
您找到你想要的搜索结果了吗?
是的
没有找到

Linux 与 Unix 到底有什么不同

或者你也许听说过Linux被称为“类Unix”操作系统。 那么,这个Unix是什么呢? 一些漫画种讲到是坐在发绿光屏幕后面的精灵般“老人”,他编写C代码和shell脚本,由老式滴灌咖啡所驱动。...这包括FreeBSD、OpenBSD和NetBSD,每个都在Unix服务器行业中有一个稍微不同目标市场。...比较 Unix 和 Linux 目前为止,我们已经了解了Unix历史,和Linux崛起,以及与Unix不同以免费和开源为基础GNU/Free软件基金会。...虽然在Unix和Linux之间有一些工具标志/命令行选项略微不同,但是他们很多操作是相同。...由于Unix家族商业和学术分支,供应商可能不得不为不同版本Unix开发不同驱动,而且作为很多不同版本Unix二进制设备驱动,对这些软件SDK或者发行版本访问,也会让他们有授权和其他方面的担忧

1.9K20

Linux编程系统僵尸们)

下图给出Linux进程从被创建(生)到被回收(死)全部状态,以及这些状态发生转换时条件: ?...3,刚被创建进程都处于“就绪”状态,等待系统调度,内核中函数sched( )被称为调度器,他会根据各种参数来选择一个等待进程去占用CPU。...换句话说:进程跟人一样,从来都没有什么平等可言,有贵族就有屌丝,他们要处理事情有不同轻重缓急之分。...当进程所等待资源变得可获取时,又会被系统置为TASK_RUNNING状态重新就绪排队。...为什么一个进程死掉之后还要把尸体留下呢?因为进程在退出时候,将其退出信息都封存在他尸体里面了,比如如果他正常退出,那退出值是多少呢?如果被信号杀死?那么是哪个信号呢?

1.3K20

linux系统编程(3)

[3]信号 (2)System 5 IPC对象进程间通信方式   [1]消息队列   [2]共享内存   [3]信号灯集 (3)socket通信 (4)Android系统中增加...Binder进程间通信方式 Linux 支持以上所有进程间通信方式 三 管道进程间通信 (1)无名管道 特点: 只能用于具有亲缘关系进程间通信(具有亲缘关系进程具有数据拷贝动作...返回值: 成功返回0,失败返回-1 (2)管道读写规则  读端存在  ,写管道 ---->只要管道没有满,都可以写入数据到管道 读端不存在,写管道 ---->此时写管道没有意义,操作系统会发送...,返回值0 (3)有名管道 特点:可以用于任意进程间通信,它是一种特殊文件,在文件系统存在名字,      而文件中存放数据是在内核空间,而不是在磁盘上 1.创建一个有名管道文件...  子进程状态发生改变时候,操作系统向父进程发送SIGCHLD,默认对它处理方式是忽略 typedef  void (*sighandler_t)(int); sighandler_t signal

1K20

Linux系统进程编程(二)

在上一篇文章中,我们已经对进程这个概念有了一个基本认识,今天我们来继续学习进程实战操作----父子进程对文件操作,以及什么是僵尸进程和孤儿进程?下面我们就开始来揭开它们神秘面纱!...(什么是接续写,简单理解就是对文件写操作完后,另外一个操作接着前面的那个操作继续往文件里面写东西)写。...哈哈哈,听到僵尸两个字是不是有点小害怕,言归正传,在Linux系统中,我们要明白:进程在运行时是需要消耗系统资源(内存、IO),进程终止时理应完全释放这些资源(如果进程消亡后仍然没有释放相应资源则这些资源就丢失了...),所以linux系统设计时规定:每一个进程退出时,操作系统会自动回收这个进程涉及到所有的资源(譬如malloc申请内容没有free时,当前进程结束时这个内存会被释放,譬如open打开文件没有close...同时,linux系统规定:所有的孤儿进程都自动成为一个特殊进程(进程1,也就是init进程)子进程。

1.6K10

Linux 与 Unix 到底有什么不同

或者你也许听说过Linux被称为“类Unix”操作系统。 那么,这个Unix是什么呢? 一些漫画种讲到是坐在发绿光屏幕后面的精灵般“老人”,他编写C代码和shell脚本,由老式滴灌咖啡所驱动。...这包括FreeBSD、OpenBSD和NetBSD,每个都在Unix服务器行业中有一个稍微不同目标市场。...比较 Unix 和 Linux 目前为止,我们已经了解了Unix历史,和Linux崛起,以及与Unix不同以免费和开源为基础GNU/Free软件基金会。...虽然在Unix和Linux之间有一些工具标志/命令行选项略微不同,但是他们很多操作是相同。...由于Unix家族商业和学术分支,供应商可能不得不为不同版本Unix开发不同驱动,而且作为很多不同版本Unix二进制设备驱动,对这些软件SDK或者发行版本访问,也会让他们有授权和其他方面的担忧

1.8K00

Linux与Unix到底有什么不同

或者你也许听说过Linux被称为“类Unix”操作系统。 那么,这个Unix是什么呢? 一些漫画种讲到是坐在发绿光屏幕后面的精灵般“老人”,他编写C代码和shell脚本,由老式滴灌咖啡所驱动。...这包括FreeBSD、OpenBSD和NetBSD,每个都在Unix服务器行业中有一个稍微不同目标市场。...比较 Unix 和 Linux 目前为止,我们已经了解了Unix历史,和Linux崛起,以及与Unix不同以免费和开源为基础GNU/Free软件基金会。...虽然在Unix和Linux之间有一些工具标志/命令行选项略微不同,但是他们很多操作是相同。...由于Unix家族商业和学术分支,供应商可能不得不为不同版本Unix开发不同驱动,而且作为很多不同版本Unix二进制设备驱动,对这些软件SDK或者发行版本访问,也会让他们有授权和其他方面的担忧

1.5K30

linux系统编程之信号(二):一些信号发送函数和不同精度睡眠

kill函数可以给一个指定进程或进程组发送指定信号,其中kill 函数pid 参数取值不同表示不同含义,具体可man 一下。...这里需要注意是输出两次recv之后继续睡眠时间是不一定,也有可能是5s,即信号处理函数在调用sleep之前已经被调用(子进程先被系统调度执行),sleep未被中断。...三、setitimer 和不同精度睡眠 1、首先来看三种不同时间结构,如下: time_t; /* seconds */ struct timeval { long    tv_sec;        ...2、三种不同精度睡眠 unsigned int sleep(unsigned int seconds); int usleep(useconds_t usec); int nanosleep(const...而如上程序所示的话,输出为simba@ubuntu:~/Documents/code/linux_programming/APUE/signal$ .

1.1K00

Linux系统编程:基本IO系统调用

文件描述符 表示 宏 0 标准输入(stdin) STDIN_FILENO 1 标准输出(stdout) STDOUT_FINENO 2 标准错误(stderr) STDERR_FILENO 遵循Linux...open()系统调用 对文件进行读写之前,必须先打开文件。Linux提供了系统调用open()。...read()系统调用 文件打开后,就能够读文件了。read()是最基础、最常见读取文件机制。...系统调用write()时,数据从用户空间缓冲区中拷贝到了内核空间缓冲区,但并没有立即把数据写入磁盘中,这称为延迟写。延迟写问题在于,如果在数据真正写入磁盘之前系统崩溃了,则数据可能丢失。...内核设置了一个时间,在该时间内将内核空间缓冲区上数据写入磁盘,该时间称为"最大存放时效"。Linux系统也支持强制文件立即写入磁盘上,这在后面介绍。

3K30

Linux系统不同机器之间拷贝文件方法

Linux系统下,不同机器上实现文件拷贝 一、将本地文件拷贝到远程机器: scp /home/administrator/news.txt root@192.168.6.129:/etc/squid...将本地文件复制到位于远程服务器上路径 二、将远程服务器上文件复制到本机 #scp remote@www.abc.com:/usr/local/sin.sh /home/administrator remote...ip地址) /usr/local/sin.sh 欲复制到本机位于远程服务器上文件 /home/administrator 将远程文件复制到本地绝对路径 注意两点: 1.如果远程服务器防火墙有特殊限制...,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下: #scp -p 4588 remote@www.abc.com:/usr/local/sin.sh /home/administrator...2.使用scp要注意所使用用户是否具有可读取远程服务器相应文件权限。

1.5K20

Linux系统驱动之不同接口LCD硬件操作原理

不同接口LCD硬件操作原理 参考资料: MIPI-DSI、MIPI-CSI、LVDS等接口解析:https://blog.csdn.net/u014470361/article/details/88891255...应用工程师眼里看到LCD LCD由一个一个像素组成:每行有xres个像素,有yres行,它分辨率是:xres * yres。 只要我们能控制任意一个像素颜色,就可以在LCD上绘制文字、图片。...16位来表示,那么一个LCD所有像素点假设有xres * y res个, 需要内存为:xres * yres * 16 / 8,也就是要设置所有像素颜色,需要这么大小内存。...驱动工程师眼里看到LCD 驱动工程师对LCD理解要深入硬件,比如要回答这几个问题: Framebuffer在哪里? 谁把Framebuffer中数据发给LCD?...是MIPI联盟发起为移动应用处理器制定开放标准和一个规范。主要是手机内部接口(摄像头、显示屏接口、射频/基带接口)等标准化,从而减少手机内部接口复杂程度及增加设计灵活性。

1.9K60

Linux系统编程fork详解

如果返回pid_t等于0的话表示当前进程是子进程,如果返回pid_t是大于0数说明当前进程是父进程,如果返回-1说明出错并设置errno。...其中父进程id为3912,子进程id为3913,其中父进程父进程应该为终端进程,id为2149。  ...最开始linux创建子进程实现方法是在子进程创建时就直接将父进程所有内容复制到子进程中,但是这一操作会造成不必要资源和时间消耗。所以就有了读时共享,写时复制机制。...系统会为子进程创建其自己4G虚拟内存,而虚拟内存又分为内核内存和用户内存,大小比为1:3。子进程虚拟地址映射了父进程虚拟地址所指向物理内存,所以父子进程实际上共享了同一块物理内存。...那么对于父子进程来说它们应该是两个独立进程,所以当父子进程对物理内存进行读操作时,二者是共享,但是如果父或子进程要进行写操作时候,此时父进程才会将要操作内容复制给子进程。

2.2K30

Linux系统下进程编程(一)

,记得刚开始学编程时候,那时候就是从这里开始萌芽。那么写了这么多函数,为啥要从这里开始“进门”呢,个人理解就是一种规定。...main()函数: 然而在我们Linux系统里面编程,它也是要准备一些前期工作:它要有编译链接时引导代码-------操作系统应用程序其实在main执行前也需要先执行一段引导代码才能去执行main...1、前面的索引,都是为了现在来讲什么是进程?进程是一个独立可调度任务,进程是一个抽象实体。...当系统在执行某个程序时,分配和释放各种资源,进程是一个程序一次执行过程(通俗,进程就是程序一次运行过程,一个静态可执行程序a.out一次运行过程(....它一般在Linux启动时开始执行,系统关闭时才结束。

2.4K10

【高级编程Linux read系统调用

什么系统调用 首先系统调用能做那些事呢?概括来说,大概有下面这些事需要系统调用来实现。 控制硬件:系统调用往往作为硬件资源和用户空间抽象接口,比如读写文件时用到write/read调用。...比如 fork、clone、execve、exit等 那为什么一定要用系统调用来访问操作系统内容呢,其实这可以看做对内核保护,linux分为用户空间和内核空间,而用户空间是不允许访问内核空间数据...进入内核空间后,系统调用中枢处理代码(所有的系统调用都由一处中枢代码处理)根据传递参数(参数是有寄存器传递包括唯一系统调用号)和一个静态表分别执行不同函数。...在具体文件系统层中,不同文件系统(例如 ext2 和 NTFS)具体操作过程也是不同。每种文件系统定义了自己操作集合。关于文件系统更多内容,请参见参考资料。...引入 cache 层目的是为了提高 linux 操作系统对磁盘访问性能。 Cache 层在内存中缓存了磁盘上部分数据。

5.9K110

Linux系统编程】进程状态

前言 在前面的学习中,我们已经学习了进程概念和基本创建,以及如何通过相关系统调用创建进程和获取进程标识符。 那为了弄明白正在运行进程是什么意思,我们需要了解进程不同状态 1....一般呢我们把它叫做基于进程切换分时操作系统,即不同进程快速切换交替运行,同一时间段内它们代码都可以得以推进,使得用户感觉多个应用程序几乎同时在运行,因为我们感官和CPU运行速度差是很大。...因为这两个状态是操作系统中进程比较核心两个状态,当然还有一个运行状态它相对比较好理解,我们后面针对具体Linux操作系统去讲解。...而我们上面了解内容其实就是基于操作系统这门课程来说,可以认为它对于所有具体操作系统都是成立,可能比较抽象。 而我们下面呢,要针对一款具体操作系统——Linux来学习一下进程状态。...所以,其实操作系统维护调度进程也有相应队列(运行队列) 运行队列通常根据不同调度策略进行管理,处在运行队列中进程,它状态就是R 所以总结一下: R运行状态(running): 并不意味着进程一定在运行中

15110

Linux系统编程】操作系统概念、定位 及系统调用

当然是不行,还需要由医生等各种工作人员,比如不同科室需要有不同医生帮助不同症状病人看病。...那同样,在计算机里面,光有那些硬件也是不行什么情况下把什么数据预加载到什么位置,内存空间不够了怎么办,输出结果要保存到文件,应该放到什么位置…等等这些问题都不是你硬件能解决。...比如校长告诉辅导员,让他下周一举办一个编程大赛,然后辅导员去落实,去准备,最后我们学生去执行。...,那校长其实就对应计算机中操作系统,学生就对应计算机中软硬件,而辅导员则对应硬件驱动。 3. 操作系统什么要做管理 那操作系统什么要对软硬件资源进行管理呢?...比如有些操作系统上有人就基于系统调用接口写了图形化界面,有的操作系统设计者就基于系统调用接口写了shell和工具集,还有比如C语言里面的一些库函数或者Linux一些命令,我们可以直接使用,但他底层可能就是去调用对应系统调用去完成对应操作

12210

Linux系统编程Linux基本指令详解(二)

那在之前呢先给大家再补充一点东西: 我们在上一篇文章中有提到一个叫做家目录概念,那我们登录上自己机器时候,其实默认就是处在自己家目录下。...总结一下: mv命令是move缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用命令,经常用来备份文件或者目录。...也就是说,cat如果后面不跟文件的话,它默认是从键盘去读取数据,我们敲什么,它就读取什么然后并显示出来。...其实在Linux中,不同后缀压缩包种类还是挺多,我们这里讲了两个比较常见,如果后续大家遇到其它不会的话,可以直接去网上搜索或查阅相关资料学习对应命令就可以。...补充说明:uname可显示linux主机所用操作系统版本、硬件名称等基本信息。

12810
领券