杂谈:所见非所得

news/2024/7/3 17:15:07

文章目录

  • 简介
  • Linux 软件编译
    • 提示非需要安装的名称
  • Kernel相关
    • kvm
    • skbuff
    • 编译错误提示隐晦
    • barrier 宏
    • clone 函数
    • iostat
    • __getname、__putname
  • 语言相关
  • C
    • scanf
    • C标准n1570,关于typedef的一个例子:
    • C++
      • Effective C++, 09 item;
      • 模板定义
  • 宏对于魔数的定义
  • python
    • 退出
  • 软件
    • ip
    • qemu
    • rpm
  • 标准
    • acpi
  • 编程规范

简介

这里简单评论一些所见非所得的代码,设计。。。
可能导致初学者的抗拒。

Linux 软件编译

提示非需要安装的名称

导致不好找原因。
[root@rms01-host01 rpmbuild]# rpmbuild -bp SPECS/qemu-kvm.spec
error: Failed build dependencies:
pkgconfig(epoxy) is needed by qemu-kvm-15:6.2.0-11.el8.2.x86_64
pkgconfig(gbm) is needed by qemu-kvm-15:6.2.0-11.el8.2.x86_64
pkgconfig(libdrm) is needed by qemu-kvm-15:6.2.0-11.el8.2.x86_64
pkgconfig(xkbcommon) is needed by qemu-kvm-15:6.2.0-11.el8.2.x86_64
[root@rms01-host01 rpmbuild]# dnf install libxkbcommon-devel libepoxy-devel libdrm-devel libgbm-devel

Kernel相关

kvm

kvm.ko 的入口函数是 vmx_init。其实也算搞反的一个例子。

skbuff

static inline void skb_reset_network_header(struct sk_buff *skb)
{
skb->network_header = skb->data - skb->head;
}
这里network_header 其实是一个长度,就是说 network-header有多长。但是根据单词的字面理解,看不出是长度。

编译错误提示隐晦

https://blog.csdn.net/qq_36428903/article/details/125924437

barrier 宏

https://blog.csdn.net/qq_36428903/article/details/124543474
这里的barrier函数其实根据字面理解的意思,不能理解其真正的含义。需要有额外的修饰词,才能完整的表达其含义。

clone 函数

#所见非所得# CLONE在这里指clone函数而非克隆的意思 FILES的含义是共享文件
在这里插入图片描述
https://blog.csdn.net/qq_36428903/article/details/124564276
这个函数被改成了:IDTENTRY_SYSVEC形式的定义;新的方式,有一个特性就是:所见非所得。导致对于新手来说非常的不友好,检索起来非常的麻烦。怎么让IDE可以索引这种形式的函数?

iostat

Systems Performance Enterprise and the Cloud
这本书里也有提到这么个例子;
The name “iostat” is short for “I/O statistics,” although it might have been better to call it “diskiostat” to reflect the type of I/O it reports. This has led to occasional confusion when a user knows that an application is performing I/O (to the
file system) but wonders why it can’t be seen via iostat(1) (the disks).

__getname、__putname

下面这两个宏的定义也是非常的具有迷惑性,谁能想到只是内存的申请。

#define __getname()		kmem_cache_alloc(names_cachep, GFP_KERNEL)
#define __putname(name)		kmem_cache_free(names_cachep, (void *)(name))

语言相关

C

scanf

scanf,这个scanf的格式串里不能有逗号,或者其他的符合分割。这样就和想象的不太一样。按照正常的思维,需要一个逗号分割一下。
比如 scanf(“%d, %d”, &i, &j); 这里的逗号就是多余的字符。加上这个逗号就会出现问题。

C标准n1570,关于typedef的一个例子:

6.7.8, 例子: typedef int MILES, KLICKSP(); 这个声明只后:
MILES distance; 这个distance是一个int类型的变量;
extern KLICKSP *metricp; metricp是一个指向无参数并且返回int的函数的指针; 这个指针的定义就是和正常的思维/逻辑有点冲突。

按照第一个int类型的同义词的定义个数,前面是要被替换的类型,后面是重新定义的一个类型别名。
跟着第一个例子的逻辑,第二个 typedef int funcp(); 这个格式就很难理解。
相似的:typedef char char40[40];这里的也很难理解,谁能一下子理解char40是一个 char类型的一个一维数组,40个元素。

https://stackoverflow.com/questions/4523497/typedef-fixed-length-array
https://cplusplus.com/forum/beginner/166041/
如果这样的类型作为函数参数,其实传递的是一个指针/引用。所以要注意,不要使用sizeof求长度。

[root@10 test]# cat typedef.c
#include <stdio.h>

typedef int a();
a *b;
typedef char a40[40];
a40 c;

int process(a40 a)
{
        printf("address of a = 0x%x, a=0x%x\n", &a, a);
        return 0;
}
int main()
{
        a40 e;
        printf("address of e = 0x%x, e=0x%x\n", &e,e);
        process(e);
        return 1;
}
[root@10 test]# ./a.out
address of e = 0x1805a4c0, e=0x1805a4c0
address of a = 0x1805a4a8, a=0x1805a4c0

C++

C++的发展,正在向着未知的方向进发。语法,格式越来越不能接受,不是不能看懂,是根本就不愿意看。虽然说很多的语法糖,但是要消耗这么多的语法糖,要消耗大量的大脑细胞。弯弯拐拐像走迷宫。如果有康庄大道,很难说服人去闯迷宫。

Effective C++, 09 item;

绝不要在构造和析构的函数里调用virtual的函数;因为对于继承来来说,初始化时,开始调用的函数就是构造,而且基类的构造要先于子类,二此时调用的话导致子类还没准备好,就开始调用子类的virtual函数,谁知道会发生什么呢。

模板定义

这里模板的参数明明是在前面定义的,为什么在使用时,会将参数放到名称后面。不能像函数定义那样?
template
struct Alloc { };
template
using Vec = vector<T, Alloc>; // type-id is vector<T, Alloc>
Vec v; // Vec is the same as vector<int, Alloc>

宏对于魔数的定义

如果使用裸魔数,就是一个所见即所得的例子。但是不利于维护,需要多走一步有利于代码的维护。

python

退出

quit,你要是敲这个单词,肯定退出不了,需要加一个双括号才能退出。这其实也是很难于理解,为什么解释器不能解释quit命令?

>>> quit
Use quit() or Ctrl-Z plus Return to exit

这个的含义是:quit 或者 exit不是python解释器支持的命令,如果要退出,需要调用quit函数

要是敲如:>>> help(quit()), 这个也可以将python解释器退出。

软件

ip

https://blog.csdn.net/qq_36428903/article/details/120267289#_142
错误提示与实际的问题不符。

qemu

qemu的这个错误提示看着是有点与实际的效果有些差距。
https://blog.csdn.net/qq_36428903/article/details/125882237

rpm

安装时依赖关系的展示,这个其实也是非常的不友好,如果可以直接展示rpm包会好一点。
error: Failed dependencies:
libdebuginfod.so.1()(64bit) is needed by dyninst-11.0.0-3.el8.x86_64
libdebuginfod.so.1(ELFUTILS_0.178)(64bit) is needed by dyninst-11.0.0-3.el8.x86_64
pkgconfig(zlib) is needed by elfutils-devel-0.186-1.el8.x86_64
pkgconfig(zlib) is needed by elfutils-libelf-devel-0.186-1.el8.x86_64
libdebuginfod.so.1()(64bit) is needed by systemtap-client-4.6-4.el8.x86_64
libdebuginfod.so.1(ELFUTILS_0.178)(64bit) is needed by systemtap-client-4.6-4.el8.x86_64
mokutil is needed by systemtap-client-4.6-4.el8.x86_64
openssh-clients is needed by systemtap-client-4.6-4.el8.x86_64
gcc is needed by systemtap-devel-4.6-4.el8.x86_64
libdebuginfod.so.1()(64bit) is needed by systemtap-devel-4.6-4.el8.x86_64
libdebuginfod.so.1(ELFUTILS_0.178)(64bit) is needed by systemtap-devel-4.6-4.el8.x86_64
libdebuginfod.so.1()(64bit) is needed by systemtap-runtime-4.6-4.el8.x86_64
libdebuginfod.so.1(ELFUTILS_0.178)(64bit) is needed by systemtap-runtime-4.6-4.el8.x86_64

标准

acpi

这个里面有定义下面几种类型的状态,但是对于C-states 却没有指明C代表什么意思。也许就是CPU。
ACPI定义的状态有:
– Global system power states (G-states, S0, S5)
– System sleeping states (S-states S1-S4)
– Device power states (D-states)
– Processor power states (C-states) (C是什么缩写,CPU,Control, Consumption)
– Device and processor performance states (P-states)

编程规范

https://blog.csdn.net/qq_36428903/article/details/128242350


http://www.niftyadmin.cn/n/1525704.html

相关文章

Maven的安装和settings.xml的配置

1 Maven的安装 安装Maven之前要确保已经安装好了jdk&#xff0c;并且配置好了环境变量JAVA_HOME。具体安装步骤如下&#xff1a; 1. 从apache网上下载maven项目的压缩包。下载地址为&#xff1a;http://maven.apache.org/download.html。比如现在最新的Maven版本是3…

书评:深入Linux内核架构,郭旭译

文章目录建议评分错误示列建议 建议下载个英文版的作为参考手册&#xff0c;这个译者翻译的内容&#xff08;有点直&#xff09;读起来不顺畅。 或者直接买英文版。英文写的还是够清楚&#xff0c;而且配的流程图很棒&#xff0c;建议买英文版。 现在教育说是要撤销英语的考试…

c语言中函数itoa的解释及作用

功 能:把一整数转换为字符串 详细解释:itoa是英文integer to array(将int整型数转化为一个字符串,并将值保存在数组string中)的缩写. 用 法:char *itoa(int value, char *string, int radix); 其中value为要转化的整数, radix是基数的意思,即先将value转化为radix进制的数,之后…

学科03:工程学重要模型

文章目录引入两种思维两种快乐工程分解结构&#xff08;Work Breakdown Structure&#xff09;举个例子&#xff08;造火箭&#xff09;量化&#xff08;Quantification&#xff09;面试题解决通法&#xff1a;工程分解结构引入 艺术的核心是表达科学的核心是发现工程的核心就…

Maven的pom.xml介绍

6 Maven的pom.xml介绍 6.1 简介 pom.xml文件是Maven进行工作的主要配置文件。在这个文件中我们可以配置Maven项目的groupId、artifactId和version等Maven项目必须的元素&#xff1b;可以配置Maven项目需要使用的远程仓库&#xff1b;可以定义Maven项目打包的形式&a…

python实现图形检测(绘制轮廓、轮廓拟合等)

图形检测 介绍 使用Opencv实现图像检测 项目地址 Pycharm环境 PyCharm 2021.3.2 (Professional Edition) Build #PY-213.6777.50, built on January 27, 2022 Licensed to 成 孙 订阅有效期至 2022年10月7日。 For educational use only. Runtime version: 11.0.137-b1751.…

JavaScript中的NaN英文全称

通过网上搜索加上本人的理解&#xff0c;本人知道了NaN的英文全称&#xff0c;为not a number。

Coredump-X: C++:std::terminate

文章目录 参考实现调用者示例示例 2示例 3总体的解决方法参考 https://stackoverflow.com/questions/22803600/when-should-i-use-stdthreaddetach https://mzhan017.blog.csdn.net/article/details/121415629 实现 libstdc+v3/libsupc++/eh_terminate.cc void __cxxabiv1:…