包含标签 Linux 的文章

Gitpod: 我们正在离开 Kubernetes

原文:Christian Weichel - 2024.10.31 Kubernetes 似乎是构建远程、标准化和自动化开发环境的显而易见选择。我们也曾这样认为,并且花费了六年时间,致力于打造最受欢迎的云开发环境平台,并达到了互联网级的规模。我们的用户数量达到了 150 万,每天都有成千上万的开发环境使用 Kubernetes。然而,在这个过程中,我们发现 Kubernetes 并不是构……

阅读全文

关于 Linux 内核“合规要求”与俄罗斯制裁的一些澄清

原文:Michael Larabel - 2024.10.24 当 一些俄罗斯的 Linux 开发者被从内核的 MAINTAINERS 文件中移除 时,原因被描述为“合规要求”,但并未明确这些要求具体涉及什么内容。随后,Linus Torvalds 对此发表了评论,明确指出,这些移除是出于政府的合规要求以及与俄罗斯相关的法律问题。而今天,这些 Linux 内核的新“合规要求”终于有了更多的解释。 “合规要求……

阅读全文

如果 Linux 这么好,为什么没有更多的人使用它呢?

原文:DHH - 2024.09.02 几周前,我在推特上看到一个问题:“如果 Linux 这么好,为什么没有更多的人使用它呢?” 这是一个很合理的问题!在你仔细考虑之前,直觉上这是正确的。Linux 甚至是免费的,如果它真的更好,那么是什么阻碍了它的大规模普及呢? 我当时的回答是: 如果锻炼身体这么健康,为什么没更多人去做呢? 如果读书这么有……

阅读全文

c/c++ max/min 4种实现方法

1.简单的宏实现 1 2 #define max(a,b) (((a) > (b)) ? (a) : (b)) #define min(a,b) (((a) < (b)) ? (a) : (b)) 2.内核的宏实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 /* safe min & max */ /* avoid ++/-- expand twice */ /* compile warning if type diff */ #define min(x, y) ({ \ typeof(x) _min1 = (x); \ typeof(y) _min2 = (y); \ (void) (&_min1 == &_min2); \ _min1 < _min2 ? _min1 : _min2; }) #define max(x, y) ({ \ typeof(x) _max1 = (x); \ typeof(y) _max2 = (y); \ (void) (&_max1 == &_max2); \ _max1 > _max2 ? _max1 : _max2; }) Linux 内核的实现是安全的,避免了 ++/– 计算多次,而且会在编……

阅读全文

线程创建 pthread_create 中自定义参数注意事项

1.函数原型 1 2 int **pthread_create**(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); 本文主要讨论最后一个参数,同时传递多个的问题 (如果只传递一个 int char 等长度小于指针的数据类型,可以直接传,然后在线程内把 (void *) 强制转换) 2.错误示例 是在一本书上看到的,也是写本文的初衷 错误原因: fds_for_new_worker 是局部变量,线程创建异步的,pthread_create 后, else if 也结束……

阅读全文

Linux fork 后 wait 获取子进程结束的状态示例

概览 使用 fork 后,可能需要获取 fork 的进程的运行状况,比如有没有异常、崩溃。 wait 在 man 中关键的描述如下: All of these system calls are used to wait for state changes in a child of the calling process, and obtain information about the child whose state has changed. A state change is considered to be: the child terminated; the child was stopped by a signal; or the child was resumed by a signal. 示例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46……

阅读全文

Linux 最简单内核模块 Hello World 示例

注: 如果想要按照本篇实践,需要有能运行的arm开发板和对应版本的内核(如果想在Linux主机上编译运行,请参考附1) 1.在相应版本内核的driver目录下新建如下文件 其中文件代码如下: /* hello.c */ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <linux/init.h>#include <linux/module.h> static int hello_init(void) { printk(KERN_INFO "[init] Can you feel me?\n"); return 0; } static void hello_exit(void) { printk(KERN_INFO "[exit] Yes.\n"); } module_init(hello_init); module_exit(hello_exit); MODULE_AUTHOR("Alan Wang <alan@wrcode.com>"); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("A simple Hello……

阅读全文

C语言结构体初始化的三种方法

示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #include <stdio.h> struct student_st { char c; int score; const char *name; }; static void show_student(struct student_st *stu) { printf("c = %c, score = %d, name = %s\n", stu->c, stu->score, stu->name); } int main(void) { // method 1: 按照成员声明的顺序初始化 struct student_st s1 = {'A', 91, "Alan"}; show_student(&s1); // method 2: 指定初始化,成员顺序可以不定,Linux 内核多采用此方式 struct student_st s2 = { .name = "YunYun", .c = 'B', .score = 92, }; show_student(&s2); // method 3:……

阅读全文

Linux C ftruncate 函数清空文件注意事项(要使用 lseek 重置偏移量)

概览 之前有个要把打开的文件清空,然后重新写入的需求,但是使用 ftruncate(fd, 0)后,并没有达到效果,反而文件头部有了'\0',长度比预想的大了。 究其原因是没有使用 lseek 重置文件偏移量,是我太天真了,以为清空文件就会从头开始写入。 文档 首先 man ftruncate 看下帮助手册 1 2 3 4 5 6 7 8 9 10 11 12 13 14 NAME truncate, ftruncate - truncate a file to a specified length SYNOPSIS int truncate(const char *path, off_t length); int……

阅读全文

gcc/g++/make 编译信息带颜色输出

概览 如果编译一个项目错误警告太多,非常不好找,所以非常希望输出信息可以带有颜色。 可是 gcc 4.9.0 之前的版本并不支持,很多情况下是不能替换编译器的,比如使用交叉编译器, 也可以使用 colorgcc,但我觉得不是特别好,需要配置,如果使用 Makefile 还要更改编译器设置, 所以我自己动手写了一个,效果还可以,源码在github……

阅读全文

最近文章

分类

标签

其它