李迟2021年6月知识总结

Posted 李迟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了李迟2021年6月知识总结相关的知识,希望对你有一定的参考价值。

本文为 2021 年 6 月知识总结。

编码总结

C / C++

使用sscanf检查不确定的输入参数:

    char name[8] = {0};
	int type = 0;
	int threadnum = 0;
	int total = -1;
	// 注:先检查多的,再检查少的
	int num = sscanf(cmd, "%s %d %d %d", name, &type, &threadnum, &total); 
	if (num != 4)
	{
		num = sscanf(cmd, "%s %d %d", name, &type, &threadnum);
		if (num != 3)
		{
			return -1;
		}
	}

注:实践中检查参数,建议使用main(argc, argv[])的形式,好修改。

docker

修改容器的root密码

场景:下载 centos 镜像,运行之,默认为普通用户,无法切换到 root——因为不知道密码。

sudo docker exec -id -u root <容器名或ID> bash

此时进入的容器即为 root 权限。再用passwd root设置密码。此时另起终端进入容器,即可用su root切换权限。当然,也可直接用上述命令进行root权限方面的操作。

python脚本创建docker镜像

知识点:执行命令,执行命令并获取返回值,字符串为空的判断。

SRC_PATH = '/home/latelee/docker-test/demo'
DOCKER_ADDRESS = "registry.cn-hangzhou.aliyuncs.com/latleee"
DOCKER_IMAGE_NAME = "busybox"
DOCKER_TAG = "latest"

def buidDocker():
    # 可切换到目标目录
    #os.chdir(SRC_PATH)

    # 查询已存在的镜像并删除之,注:用popen获取返回的镜像ID
    cmd = "docker images | grep " + DOCKER_IMAGE_NAME + " | awk '{print $3}'"
    imageid = os.popen(cmd).read()
    #print("cmd %s %s" % (cmd, imageid))

    if len(imageid) != 0:
        print("found docker image, remove it")
        cmd = 'docker rmi ' + imageid
        os.system(cmd)

    print("start build  docker in %s" % (SRC_PATH))

    # 使用绝对路径
    cmd = "docker build -t " + DOCKER_ADDRESS + "/" + DOCKER_IMAGE_NAME + " " + SRC_PATH
    # 前述切换目录,则可用此命令
    #cmd = "docker build -t " + DOCKER_ADDRESS + "/" + DOCKER_IMAGE_NAME + " ."
    #print("build cmd: %s " % (cmd))
    ret = os.system(cmd)

    if ret == 0:
        print('build docker ok')
    else:
        print('build docker failed')

SQL

查询 sqlite3 数据库所有表名:

SELECT name FROM sqlite_master where type='table' order by name

编码其它

Makefile

继续总结 Makefile 知识:

某工程需编译为 32 位程序和 64 位程序,因为有2套目标系统。原来的工程使用 eclipse 编辑和编译。接手后改为 Makefile 编译,为方便个人使用,研究如何在 Makefile 中自适应 2 种不同位数的系统。

在 shell 脚本中可如下方法判断系统位数:

BITS=`getconf LONG_BIT`
BITS="  --$BITS"bit

根据所在系统,上述输出结果为32bit64bit,此字符串可用于生成版本号头文件。

在 Makefile 中如下使用:

ARCH = $(shell getconf LONG_BIT)

DEFS    += -DARCH=$(ARCH)

ifeq ($(ARCH), 32)
CFLAGS += -I/usr/local/sqlite/sqlite-x86/include/
LDFLAGS += -L/usr/local/sqlite/sqlite-x86/lib/ -L/usr/local/uuid/uuid-x86/
endif

这样就能根据不同的系统使用不同的库目录。

另外,目标系统中,32 位为 debian 系统,64 位为 centos 系统,本想用 Docker 实现同一虚拟机的编译,但因为版本不好找,放弃之。再者,工程有大量不再使用但未删除的代码,大部分变量、函数近似,只是相差几个字符或日期,如foofoo_Ifoo_2020,导致一定的阅读障碍——刚刚看过的代码段,切换了文件,又看到相同的,过一会,还能看到相同的。目前暂不敢动。

版权

github上有个外国网友在一个几年前的项目上咨询协议,因为当时代码是没有版权声明的——现在大部分代码都没有,看了些帖子,大意是没有声明版权的话,默认是私有不开源的。考虑之后,还是要将自己仓库加上声明的。对其它人友好,对后续维护亦友好。目前暂定是 BSP 协议,限制比较少。

BSD:允许商用、私用(共开亦可)。带原有的版权文件,修改后的代码不用做说明。不能用作者名字做推广。

一般知识

研发思考

写代码久了,发现自己不敢突破,不追求编程技巧,而是追求可维护性、可读性。有时候,发现一些问题后自然会去重构,但重构后发现达不到预期,因为有些隐藏得很深的业务点,自己并没有掌握了解,贸然修改,只会浪费时间。所以,只要不出问题,不会主动去改,但像代码风格命名这种影响编程效率的,不在此列。在修改过程中,则根据实际情况**部分重构 **。

领域设计:先对某领域有一定认知,进行总结概括,理清逻辑,再进行设计。个人见解:应该不合适,编码多年,接触了不同领域的行业,但自己那套学习知识的方法和编写的代码,或多或少都能应用上。——因为会总结积累,从而形成自己的知识库,以应对不同的领域/业务。而且更重要的一个原因,自己并没有在一个领域中深耕。可能自己对业务研究不深,沉淀不够,才得出以上结论。

本月学习及计划

其它点滴

自体检出结果,打完2针疫苗,外包人员取消餐补后,家里那位问什么时候买房,又和老爸老妈小吵一次,工作和生活都没动力了。但并没有耽误公司的事,晚上加了几次小班,上周末加了一整天的班(早上8点到公司至下午6点离开),在百年献礼中也算出了一点微不足道的力。

以上是关于李迟2021年6月知识总结的主要内容,如果未能解决你的问题,请参考以下文章

李迟2021年6月知识总结

李迟2021年11月知识总结

李迟2021年11月知识总结

李迟2021年7月知识总结

李迟2021年10月知识总结

李迟2021年10月知识总结