C
万能菜道人
博客的书写一点都不好看,有的挺乱的,我在试着优化。
展开
-
GUN89局部变量定义必须放在前面?
如果没有啥要求,加一个static,就不是局部变量了,可以临时应付一下~谁能想到VS2010还用的GUN89.局部变量放放在前面挺尴尬的。原创 2024-01-10 17:11:22 · 437 阅读 · 0 评论 -
linux驱动程序学习之基础的hello world和线程打印程序
其实驱动的概念我已经有了接触,这里写一下基础的入门例子。原创 2023-06-24 15:50:19 · 340 阅读 · 0 评论 -
一个float和int的联合体,给一个赋值,另外一个的显示和你想的可能不一样
【代码】一个float和int的联合体,给一个赋值,另外一个的显示和你想的可能不一样。原创 2023-05-30 19:02:07 · 581 阅读 · 0 评论 -
C类型强转的理解
其实并不难,只是没有注意到强转的区别。指针强转:什么都不做修改,只是修改了对地址的边界和对地址中数据的解释。变量强转:创建一个临时变量,将原数据进行转换到临时变量。所以不能使用&来取变量强转之后的地址。...原创 2020-07-13 18:50:36 · 381 阅读 · 0 评论 -
modpost使用的心得记录
e 指定依赖的其他符号。这个就是很可能遇到的,一个ko需要使用别的ko的API,这里不仅是要提供者使用EXPORT_SYMBOL来导出符号,还需要在这里将对应的提供者ko编译完成伴生的Module.symvers给指定出来。这里指定了没有找到也不会有报错的。-I :这个参数是读取上一次自己生成的Module.symvers文件,如果依赖的属性变化,似乎没有及时更新啊,这个make clean会自动删除,推荐编译前删除。这个是在编译内核态ko才会用到的一个命令。内容其实上面的参考都有提到。原创 2023-04-13 14:54:43 · 774 阅读 · 0 评论 -
EXPORT_SYMBOL和其用户态类似的使用方式学习
具体来说,当一个模块使用EXPORT_SYMBOL导出符号时,其他模块就可以使用该符号。例如,一个模块可以导出一个函数,供其他模块调用,或者导出一个变量,供其他模块读取或修改。需要注意的是,EXPORT_SYMBOL导出的符号只能被其他模块使用,而不能被用户空间的程序使用。如果需要在用户空间使用符号,可以使用EXPORT_SYMBOL_GPL宏定义,它会限制符号的使用权限,只允许GPL协议的模块使用。在Linux内核中,模块是可以在运行时插入和移除的,模块之间需要相互通信,因此需要在模块之间共享符号。原创 2023-03-15 10:33:52 · 1889 阅读 · 0 评论 -
linux segfault at 问题定位实践
它指示崩溃发生在名为“mydefine.so”的共享库中,并且该库的基址为“7fb668d34000”,大小为“11000”字节。总体而言,此错误消息提供了一些用于调试崩溃的有用信息,包括发生故障的内存地址和指令指针、分段错误的类型以及发生崩溃时正在使用的共享库的名称和位置。生成独立的文件,用编辑工具打开来查看对应的1823c是属于哪一个函数,然后打开源码进行对应,定位是哪一个函数的哪一行出现的问题。这里仅仅使用了ip和so的基地址,其他的内存和sp地址信息暂未使用。偏移地址= 指令指针 - 库的基地址。原创 2023-03-09 11:41:45 · 1544 阅读 · 0 评论 -
内存映射文件的优势劣势体会
现在才真正使用了一次mmap,之前是没有使用的需求。优势体会:1.内存映射文件虽然可以避免IO操作,性能更好,但是使用起来并不比fwrite,fread简单。2.断电时正在写文件的话,该文件在开机之后就是空的了,内存映射可以避免这个问题,至少保证文件中是有数据的。3.应该是可以用于IPC进程通信,目前还没有使用过这个。劣势:1.使用比较麻烦,还有一些细节要理解,字节对齐等等。...原创 2020-08-12 15:33:47 · 2370 阅读 · 1 评论 -
gcc 新旧版本ldd的显示动态库的不同
而使用 -Wl,--no-as-needed放入gcc的编译命令,就代表着在链接动态库的时候,即使检测到没有用到,也会添加到生成的信息中。1.动态库的顺序很重要,每链接一个动态库,都是从动态库中搜索symbol来进行填充,链接结束之后,后面再用就不检测了。这里旧的gcc链接动态库进行搜索使用的symbol的时候,没找到也会添加到生成的so中去,但是。2.一个链接的参数:--no-as-needed 或者--as-needed。新的gcc就不生成,这就导致了ldd显示出的so中的依赖的不同。...原创 2022-08-11 17:58:57 · 754 阅读 · 0 评论 -
C结构体的整体赋值学习
这时可以有一种临时变量的方式来进行赋值(利用了类型强转会进行创建临时变量和同样结构体变量可以直接=号进行赋值两个特性。原创 2022-08-04 15:25:20 · 2089 阅读 · 0 评论 -
C for循环内定义int i变量出现的重定义问题
换个编译环境就可以。可以在不修改代码的情况就完成局部化。在每一个for循环外添加。原创 2022-07-20 15:36:46 · 1001 阅读 · 0 评论 -
记录一个傻帽到家的笑话代码
四五年接触C语言,一时还能写出搞笑的代码:打印: 够不够沙雕~~~原创 2022-07-11 17:47:22 · 244 阅读 · 0 评论 -
C 自定义exp,log,ln函数源码记录
1.因为某些原因使用自定义的,没有自己写的代码都是拷贝的。版本一:exp:static double my_log2(double x){ register double ret; __asm__( "fld1;" "fxch;" "fyl2x" : "=t" (ret) : "0" (x) ); return ret;}static double log2(double x)原创 2022-02-22 16:16:51 · 1528 阅读 · 0 评论 -
32位C程序在64位上使用遇到的问题记录
1.返回值是指针。注意当函数的返回值是指针时,需要注意显示声明!如果隐式声明会被默认截断为32位数据,指针就会出问题,导致崩溃轻而易举。原创 2022-01-21 17:35:19 · 461 阅读 · 0 评论 -
linux C用户态与内核态获取系统时间
目前主要是使用获取从1970年1月1日之后的秒数。用户态: struct timeval time = { .tv_sec=0, /*单位:s*/ .tv_nsec=0 /*单位:ns*/ }; unsigned long long int sec,usec = 0; clock_gettime(0, &time); sec = (unsigned long long int)time.tv_sec; usec = (unsigned long long int)原创 2021-12-28 10:12:18 · 2826 阅读 · 0 评论 -
使用clang交叉编译long double的计算出错
报错内容:undefinedsymbol __addxf3在实际的64位下位机并没有该报错。原因猜测:在window上位机可能环境并不全面,编译命令不完善,导致没有导入该定义。处理:暂时改为了double进行使用。...原创 2021-10-08 16:04:01 · 202 阅读 · 0 评论 -
隐式声明的警告需要谨慎
修复了之后至少没有崩溃了,目前不清楚原因原创 2021-10-08 15:59:46 · 314 阅读 · 0 评论 -
libssh2编译lib/dll与使用的步骤
1:下载源码:libssh2https://www.libssh2.org/2.OpenSSL安装编译libssh2需要安装OpenSSL,这里自己编译库比较复杂,直接安装带库的包比较方便:直接从Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions下载注意,不要下载 light 版本,因为 light 版本不带库文件。3.在根目录创建编译目录mkdir buildcd bui...原创 2021-09-26 15:01:39 · 5405 阅读 · 0 评论 -
提问:动态库连接到名称不一致的其他库是什么情况?
Linux debian 3.4:Ldd middle.solinux-gate.so.1 (0xb7753000)libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7576000)libtest_01_0_XXX.so => /usr/lib/libtest_1_0_XXX.so (0xb74e0000)/lib/ld-linux.so.2 (0xb7754000...原创 2021-09-01 15:20:48 · 172 阅读 · 0 评论 -
使用clang在window下编译dll并使用
简单创建hello.c,hello.h,和main.c调用。hello.h:#ifndef HELLO_H#define HELLO_H#include<stdio.h>__declspec(dllexport) void hello();#endifhello.c:#include "hello.h"void hello(){ printf("hello\n");}编译为dll:clang hello.c -shared -o hello.dl原创 2021-08-10 15:35:17 · 1681 阅读 · 0 评论 -
C++ 重写重定义的区别记录
又忘了。#include <iostream>using namespace std;class Car{public: virtual void Drive() = 0; //纯虚函数 void Drive1() {cout << "Drive_CAr" << endl;};};class Benz :public Car{public: virtual void Drive() { cout <<原创 2021-08-04 15:22:34 · 114 阅读 · 0 评论 -
C 数组指针的使用 *与()的困惑
如下代码:#include<stdio.h>typedef struct{ int *table[5];}AAAA;typedef struct{ AAAA value;}BBBBB;int main(){ BBBBB b1 = {}; int a[5] = {1,2,3,4,5}; int i=0; for(;i<5;i++) { b1.value.table[i] = &a[i]原创 2021-07-21 09:37:29 · 76 阅读 · 0 评论 -
window 共享内存 C基础例子
代码:#include <windows.h>#include <stdio.h>/* 关闭程序,自动释放映射*/int main(){ char *pData = NULL; // 首先试图打开一个命名的内存映射文件对象 HANDLE hMap = OpenFileMapping(FILE_MAP_ALL_ACCESS, 0, "test1"); if (NULL == hMap) { printf("open fail原创 2021-06-11 16:44:51 · 442 阅读 · 0 评论