Wang shaodong's Blog

Wang shaodong's Blog

About pwd
Created2020-01-28
关于工作路径  工作路径是进程的一个重要的属性,在pcb结构中应该是一项成员,平时和文件交互的比较少的业务很少会关注程序的工作路径的问题 情形  为了适配不同的厂商或者版本,想要后台程序通过读取配置文件方法来,减少某个组件编译次数, 每次厂商变更只需要改下配置文件中的厂商名字就行了,不必要在代码中写死,每次都要换个厂都要加个宏,在代码中加入一个常量 需求  Android后台程序(为方便设置为daemon.exe位于/system/bin/目录下)daemon.exe开机启动的时候要读取/system/bin/下的product.conf文配置文件. 代码实现 主要代码就是打开文件的地方,然后调用系统的解析取配置文件的接口,读取配置文件是一个有意思的小项目,可以自己实现一次12345678Linux 环境中包含 <unistd.h>头文件可以使用getcwd, getwd, get_current_dir_name 获取程序的当前工作路径 char *getcwd(char *buf, size_...
About Thread
Created2020-01-24
多线程编程是实用程序必然要用到的工具 没有多线程、多进程编程就不是现代编程人员做的事情多线程的优缺点**优点** * * **缺点** * * pthread_cond_wait pthread_cond_signal 多线程的同步方法多进程的同步方法原子操作binder 通信RPC 调用12345678910111213141516171819202122char * mystrstr(const char *str,const char *substr){ if(str==NULL||substr==NULL) { printf("error NULL\n"); return NULL; } if(strlen(str)<strlen(substr)) { return NULL; } char *cp=str; char *subcp=substr; while(*cp) { while(*cp && *subcp && !(*cp-*...
About codestyle
Created2020-01-24
什么是 codestyle?  codesytle 包括变量、函数命名规范,回车换行的使用,以及空格对齐,还是tab对齐,对齐两个空格,还是四个空格. 为什么团队需要统一codestyle?  自己写代码只给自己看还可以,爱怎么写就怎么写,只要编译通过跑的起来就ok, 但是涉及到多人协作,就要考虑其他人可能要阅读你的代码.当多人协作使用一套代码时,代码风格不统一就像书法作品中一会儿行书,一会草书,一会儿楷书,一会儿小篆一样,造成风格的混乱会降低阅读效率. 代码是写给人看,顺便给计算机执行的. 人都没法看, 没法维护. 为什么会有 codestyle?  刚开始的编程语言的编译要求是比较宽松的,比如说C/c++/Java中对于多余的空格(回车换行等留白),对indent没有特殊的要求,分号分割就认为是一个语句.python 就是对空格、tab留白要求比较严格的语言,不同的缩进可能会导致不同的语义,也可能编译、执行失败, 我认为空格和回车的使用是导致风格之间差异的重要因素. 我自己的感受  在公司求严格的codesytle之后,刚开始还不太习惯,习惯之后回头看自己...
About sizeof
Created2020-01-24
sizeof 的误解,sizeof 不是函数(function),是运算符(operator)  函数在程序运行的时候起作用,运算符求出来的大小是在编译时就确定下来的 常见的sizeof操作 对结构体类型求大小 1234567891011typedef struct { char a; int b; char *ptr; double c; char name[19];} Demo;// 结构体的实际所占用内存大小,需要内存对齐,按照4byte或者8byte对齐,// 对齐的原则整体大小能被4整除,而且每个成员的地址偏移都是4的整数倍std::cout << sizeof(Demo) << std::endl; 对联合体求大小 1234567891011#include<stdio.h>// 联合体的大小是能够容纳最大的成员的大小, 还要考虑一下四字节对齐typedef union { int a[3]; char b[8] ;} data;int main(){...
About Makefile
Created2020-01-24
make 是用来组织大型工程必不可少的工具  make 有各种变体: Qt的qmake, 跨平台的 cmake, 微软的 nmake make menuconfig  好像最早是在linux kernel 中使用到的, 在构建kernel 之前使用这个命令会 根据kernel目录下的Makefile和其他的文件以及kconfig语法生成命令行的gui菜单可以勾选,依赖 ncurses make -n  make 调试使用的命令,空跑一次,不执行实际操作,把要执行的动作打印出来 make -f filename  指定makefile 文件,不默认寻找 Makefile,makefile make  假设当前目录下有 hello.c 执行make hello 会尝试编译 hello.c 到hello make -C dir_name  执行make 命令之前 进入到 dir_name 中, 常常在项目中递归的使用 make -k
About Algorithm
Created2020-01-21
关于算法的思考算法出现的比计算机要早很多:比如说 最大公约数(Greatest common divisor 简写为GCD)的求法,早在 公元前300年出版的《几何原本》中已经有算法,至今仍然是很实用的方法. 算法我之见 我的看法就是求解某类或者某个问题的固定方法:按照方法做就一定能在有限的时间内得到结果.算法要理解必须有自己的思路,否则当时学会或者记住了,过一阵子就会忘记(记忆天才除外吧). 算法学习/推导的过程把自己思路教给计算机,使用计算机的语言准确描述描述。 将你的想法交给计算机去执行,首先要了解一个算法手动是怎样计算的, 手动推演两到三步然后归纳出规律,使用while和if将你的想法写出来伪代码(伪代码甚至可以有一些逻辑错误),有一点小错误,不要紧, 然后开始将伪代码转为C++代码,调试各种特殊情况和一般情况(测试) 最后自己的(烂)算法大功告成,进行优化和分析确保逻辑上不会有大漏洞 推演的技巧可以从简单的情况入手,尝试解决问题保证自己理解了算法的需求背景, 特殊推导一般(情形越特殊越简单,高中数学老师讲的),代码中可能有专门用于特殊情况...
About Linux
Created2020-01-20
Linux 的作用范围  Linux 本来仅仅是指一种类Unix系统(和unix比较像的操作系统称为类Unix系统)的kernel, 不包括 shell等其它实用工具.随着linux的日益壮大或者人们的口口相传,原本应该是GNU/Linux 指代整个操作系统,后来渐渐Linux 也指代整个操作系统. 但是在具体的上下文环境中还是可以分清楚是指代内核还是整个操作系统 Linux 的常见发行版本  首先解释什么是发行版本:发行版本是开源社区或者公司,甚至是个人把Linuxkernel拿过来,整合其它的使用工具,以及软件管理工具装配的一个便于终端用户使用的操作系统根据软件包管理工具的不同大概分为两个系列 :Debian 系列(使用 dpkg 作为底层工具)和 Redhat 系列(使用 rpm 作为底层工具),还有一些特立独行的发行版本使用的是其他的软件包管理工具(比如说 arch,和 gentoo) dpkg 系 Debian Ubuntu Linuxmint Deepin rpm 系 Redhat CentOS Fedora SUSE OpenSUSE pacma...
About GCC
Created2020-01-20
gcc  gcc 是 GNU Compiler Collection 的缩写,不仅支持 C/C++的编译,还支持Java等 gcc 基本操作1gcc hello.c -o hello   会编译输出 hello 可执行文件,如果不使用-o选项指定输出的文件名怎会生成 a.out文件 神奇的a.out  是汇编(assemble)输出(output)的意思在freebsd 中 man a.out 可以看到相关信息 gcc的扩展支持语法 函数内部定义函数 123456foo (double a, double b){ double square (double z) { return z * z; } return square (a) + square (b);}
About inline function
Created2020-01-20
inline 是C99/C++的关键字之一,目的是取代函数式宏,函数式宏没有类型 内联函数 vs 函数式宏(待考证,可能有谬误) 编译中的差别: 内联函数 在编译时在调用函数中内敛只是是一种建议(像regester 一样),不一定被编译器采纳(The inline specification is only a request to the compiler. The compiler maychoose to ignore this request – – C++ primer),如果内敛函数很复杂(循环嵌套比较多),或者包含静态变量等情况就无法内敛就无法被编译器当做是内联函数 函数式宏 在预处理阶段被文本替换,在预处理阶段必然被替换 二进制的区别: 函数式宏 如果被使用多次 代码区增大 内联函数 如果被使用多次 代码区域没有显著增大 运行时的差别: 函数式宏,不是函数,在运行时没有体现 内联函数,几乎没有函数参数传递的开销 不同编译器对 inline 的支持 clang挖坑 gcc挖坑
About Shell
Created2020-01-19
shell 直译为壳  有个著名的油气公司叫做荷兰皇家壳牌(英語:Royal Dutch Shell Plc)是世界第二大石油公司,公司在英國註冊,总部位于荷兰海牙。外国人什么都叫做壳,蛋壳,地壳,都是shell 有种包裹什么东西在里面的感觉操作系统分为内核和外壳 这个壳叫做shell, shell 用来和内核交流,shell 有CUI(命令行的), GUI (图形化的).unix/linux/freebsd 操作系统上最通用的人机交互界面就是命令行,典型 windows上最常用的是 图形化界面(忘记了一个gui系统的几个基本元素mouse ,window, focus,)下面主要讨论 命令行shell 格式各样的shell  常见的bash,sh, zsh,fish (经常听说 bash 4.xx 有什么命令注入漏洞)ash :bash(Bourne-Again SHell) :比较流行的一个shell基本各大linux发行版本都默认设置bash为shellzsh :号称最后一个shell 因为字母 z是最后一个了。。fish : 灵活的交互式shell, ...
1…789
avatar
wang shaodong
Articles
83
Tags
15
Categories
0
Follow Me
Announcement
This is my Blog
Recent Posts
Contact ways2026-06-13
Hexo Quick Manual2023-01-24
kernel structs pos2022-03-23
busybox SUID support2022-03-23
kernel image formats2022-03-23
Tags
Tool Others sql shell Tools git terms Tools algorithm C/C++ other alogrithm Linux/C C/C++ Linux tools others
Archives
  • June 2026 1
  • January 2023 1
  • March 2022 19
  • September 2021 6
  • August 2021 11
  • August 2020 1
  • June 2020 1
  • May 2020 3
Website Info
Article Count :
83
Unique Visitors :
Page Views :
Last Update :
© 2025 - 2026 By wang shaodongFramework Hexo 8.1.2|Theme Butterfly 5.5.5