首页
zfl9's blog
取消

Zig MIPS 软浮点问题

问题描述 在开发 ChinaDNS-NG 2.0 的过程中,遇到一个 MIPS 软浮点目标的链接器错误,zig 版本是 0.10.1。 $ zig build clean-all && zig build -Dtarget=mips-linux-musl -Dcpu=mips32+soft_float --verbose ... error: ld.lld: /root/...

WLAN 笔记

本文主要记录 Linux 与无线网络相关的一些知识和操作笔记,包括:如何编译无线网卡的驱动、如何利用 dkms 在内核更新时自动编译驱动模块、以及 hostapd、wpa_supplicant、iw 等实用工具的用法。 内核模块 在 Linux 中,驱动一般都是通过内核模块的形式提供。内核模块分为 内置模块、可加载模块:内置模块是静态编译进内核的,无需通过 modprobe、insmod...

C语言 进程间通信 管道

匿名管道pipe shell中的管道 如果你使用过Linux的命令,那么对于管道这个名词你一定不会感觉到陌生,因为我们通常通过符号|来使用管道; 但是管道的真正定义是什么呢? 管道是一个进程连接数据流到另一个进程的通道,它通常是用作把一个进程的输出通过管道连接到另一个进程的输入; 举个例子,在shell中输入命令:ls -l | grep string 我们知道ls命令(其实也是...

C语言 多进程编程

进程、线程 进程是资源分配的最小单位,线程是CPU调度的最小单位 进程(Process) 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础; 在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器; 程序是指令、数据及其组织形式的描述,进程是程序...

C语言 socket编程(四)

IO模型 网络IO的本质是socket的操作,我们以recv为例: 每次调用recv,数据会先拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间; 所以说,当一个recv操作发生时,它会经历两个阶段: 第一阶段:等待数据准备 第二阶段:将数据从内核拷贝到进程中 对于socket流而言: 第一阶段:通常涉及等待网络上的数据分组到达...

C语言 socket编程(三)

getsockopt、setsockopt int getsockopt(int socket, int level, int optname, void *optval, socklen_t *optlen); 获取套接字属性 socket:输入参数,要操作的socket套接字 level:输入参数,协议层:SOL_SOCKET通用套接字选项、IPPROTO_IPIP选项...

C语言 socket编程(二)

socket缓冲区 对于tcp_socket,在创建socket的时候同时分配了两个缓冲区:发送缓冲区、接收缓冲区,每个tcp_socket之间的缓冲区的互相独立的 对于udp_socket,只有一个缓冲区:接收缓冲区,没有发送缓冲区,因为udp的不可靠,所以也没必要在内核中保存发送的副本 滑动窗口: tcp实现流量控制的核心就是滑动窗口,所谓滑动窗口,可以理解为接收缓冲区buf...

C语言 socket编程(一)

socket 网络主机之间的应用程序如何进行通信? 网络层的ip地址可以唯一标识网络中的主机; 而传输层的协议+端口可以唯一标识主机中的应用程序(进程); 这样利用三元组(ip地址 + 协议 + 端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互 什么是socket套接字? 上面我们已经知道网络中的进程是通过socket来通信的,那什么是soc...

C语言 断言

assert断言 断言是对某种假设条件进行检查(可理解为若条件成立则无动作,否则应报告) 它可以快速发现并定位软件问题,同时对系统错误进行自动报警 断言可以对在系统中隐藏很深,用其它手段极难发现的问题进行定位,从而缩短软件问题定位时间,提高系统的可测性 使用断言需要包含头文件: assert.h 断言的宏原型为:void assert(expression); expressio...

C语言 printf与scanf

printf()系列 头文件:stdio.h、stdarg.h int printf(const char *fmt, ...);:输出至stdout int fprintf(FILE *stream, const char *fmt, ...);:输出至stream int sprintf(char *str, const char *fmt, ...);:输出至str ...