<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[zzbeagle的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/zzbeagle</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; zzbeagle]]></copyright><item><title><![CDATA[给老 ubuntu 服务器 (非 root 用户) 安装 vim]]></title><link>https://blog.youkuaiyun.com/zzbeagle/article/details/121186380</link><guid>https://blog.youkuaiyun.com/zzbeagle/article/details/121186380</guid><author>zzbeagle</author><pubDate>Sat, 06 Nov 2021 23:50:08 +0800</pubDate><description><![CDATA[由于公司服务器 vim 太老, 而自己想要用新版的 vim, 但没有去 root 权限没法安装, 也没法编译 vim 源码. 于是在虚拟机下安装 vim 再拷贝到服务器.

找个与服务器相同的 linux 版本安装到虚拟机上, 如服务器是 ubuntu18.04 的就在虚拟机上安装ubuntu18.04, 然后开始编译源码, 编译源码可以参考Ubuntu 18.04 下编译安装 vim 8.1.

编译前要特别注意configure 时, 要配置 `-prefix=` 为服务器上所要拷贝至的路径, 因...]]></description><category></category></item><item><title><![CDATA[批量解析 android 堆栈脚本]]></title><link>https://blog.youkuaiyun.com/zzbeagle/article/details/121045773</link><guid>https://blog.youkuaiyun.com/zzbeagle/article/details/121045773</guid><author>zzbeagle</author><pubDate>Sat, 30 Oct 2021 01:08:17 +0800</pubDate><description><![CDATA[import os
import re
import sys
import subprocess

current_path = os.getcwd()
aadr2Tool = 'aarch64-linux-android-addr2line'

def printTrace(inFile):
    line_num = 0  # trace num
    with open(inFile, 'r', encoding='utf-8') as in_fd:
        line = in_fd.r.]]></description><category></category></item><item><title><![CDATA[Ubuntu 18.04 xfce4桌面下命令行下联网]]></title><link>https://blog.youkuaiyun.com/zzbeagle/article/details/119292187</link><guid>https://blog.youkuaiyun.com/zzbeagle/article/details/119292187</guid><author>zzbeagle</author><pubDate>Sun, 01 Aug 2021 08:18:56 +0800</pubDate><description><![CDATA[#!/bin/bash
nmcli dev wifi
nmcli dev wifi connect ssidxxx  password passxxx

重启网络


#!/bin/bash

sudo service networking restart
sudo service network-manager restart


]]></description><category></category></item><item><title><![CDATA[一个解析日志的脚本]]></title><link>https://blog.youkuaiyun.com/zzbeagle/article/details/115514348</link><guid>https://blog.youkuaiyun.com/zzbeagle/article/details/115514348</guid><author>zzbeagle</author><pubDate>Thu, 08 Apr 2021 11:52:25 +0800</pubDate><description><![CDATA[#!/usr/bin/env python3
#coding=utf-8
import unicodedata
import os
import re
import sys
import subprocess


current_path = os.getcwd()
#print(current_path)
with os.popen('find $PWD  -maxdepth 1 -type d -name "*chi-cdk"') as chi_fd:
    chi_path = chi_fd.rea]]></description><category></category></item><item><title><![CDATA[两子数组交集问题]]></title><link>https://blog.youkuaiyun.com/zzbeagle/article/details/115421959</link><guid>https://blog.youkuaiyun.com/zzbeagle/article/details/115421959</guid><author>zzbeagle</author><pubDate>Sat, 03 Apr 2021 23:42:02 +0800</pubDate><description><![CDATA[同事刷题:
给定一个元素,类型为小写字符串数组, 请计算两个没有相同字符的子数组的长度乘积的最大值, 若果没有符合条件的子数组, 返回0.
输入条件: 输入为半角逗号分隔的小写字符串数组, 数组长度[2,100], 字符串长度[0,50]
#!/usr/bin/env python3
import re

arr=[]
arr = input('Enter the str: ')

# get between [2,100] num of lowcase chars splittd with','
whil]]></description><category></category></item><item><title><![CDATA[python3 中英文标点转换]]></title><link>https://blog.youkuaiyun.com/zzbeagle/article/details/115419708</link><guid>https://blog.youkuaiyun.com/zzbeagle/article/details/115419708</guid><author>zzbeagle</author><pubDate>Sat, 03 Apr 2021 19:48:26 +0800</pubDate><description><![CDATA[工作中遇到需要把中文标点转化成英文标点的需求,
#coding=utf-8
import unicodedata
import os
import re

def punctuation_mend(string):
    #输入字符串或者txt文件路径
    table = {ord(f):ord(t) for f,t in zip(
                u'，、。！？【】（）％＃＠＆１２３４５６７８９０“”‘’',
                u',..!?[]()%#@&amp;12]]></description><category></category></item><item><title><![CDATA[非root用户安装命令]]></title><link>https://blog.youkuaiyun.com/zzbeagle/article/details/109369991</link><guid>https://blog.youkuaiyun.com/zzbeagle/article/details/109369991</guid><author>zzbeagle</author><pubDate>Thu, 29 Oct 2020 21:15:21 +0800</pubDate><description><![CDATA[bash 命令行配置

提示符PS1='\[\e[90m\][\[\e[33;1m\]\w\[\e[90m\]]$\[\e[0m\] \[\e[37m\]'
工具


	The Silver Searcher &amp; ripgrep &amp; vim8.2服务器环境

	
	[~]$ lsb_release -a
	No LSB modules are available.
	Distributor ID: Ubuntu
	Description: Ubuntu 14.04.5 LTS
	Relea.]]></description><category></category></item><item><title><![CDATA[FW中写死密码]]></title><link>https://blog.youkuaiyun.com/zzbeagle/article/details/108716241</link><guid>https://blog.youkuaiyun.com/zzbeagle/article/details/108716241</guid><author>zzbeagle</author><pubDate>Mon, 21 Sep 2020 18:35:54 +0800</pubDate><description><![CDATA[https://forum.archive.openwrt.org/viewtopic.php?id=37190
最简单的是设置好密码后, 把shadow文件里的内容写死到FW里.

]]></description><category></category></item><item><title><![CDATA[openwrt编译sdk是报错“File “/usr/lib/python2.7/subprocess.py“, line 1047, raise child_exception “]]></title><link>https://blog.youkuaiyun.com/zzbeagle/article/details/108564873</link><guid>https://blog.youkuaiyun.com/zzbeagle/article/details/108564873</guid><author>zzbeagle</author><pubDate>Sun, 13 Sep 2020 18:20:06 +0800</pubDate><description><![CDATA[问题
在编译openwrt的SDK时, 执行 python genimg.py --bootconfig_gen=bootconfig_tool --mbn_gen=nand_mbn_generator.py --configdir=config/ --skip_export --outdir=image/bin --image_name=BOOTCONFIG_IMAGES 包如下错误:	Processing ENTRY_SVH01-C1
        Using existing directory:.]]></description><category></category></item><item><title><![CDATA[C++类的成员变量在声明时初始化]]></title><link>https://blog.youkuaiyun.com/zzbeagle/article/details/107975362</link><guid>https://blog.youkuaiyun.com/zzbeagle/article/details/107975362</guid><author>zzbeagle</author><pubDate>Thu, 13 Aug 2020 11:13:22 +0800</pubDate><description><![CDATA[能。可能早先的版本不能，但是c++11标准下能。有人说在声明的时候初始化相当于在构造函数中初始化，其实不是的，成员变量初始化的顺序为：先进行声明时初始化，然后进行初始化列表初始化，最后进行构造函数初始化，如下代码：（另外初始化列表中初始化的顺序是和变量声明的顺序一样，而与列表中的顺序无关）
#include &lt;iostream&gt;
using namespace std;

class Test {

public:
    Test() {}
    Test(int a_) : a(a_) {]]></description><category></category></item><item><title><![CDATA[编写一个程序解决选择问题. 令 k = N / 2]]></title><link>https://blog.youkuaiyun.com/zzbeagle/article/details/107475870</link><guid>https://blog.youkuaiyun.com/zzbeagle/article/details/107475870</guid><author>zzbeagle</author><pubDate>Mon, 20 Jul 2020 22:20:59 +0800</pubDate><description><![CDATA[数据结构与算法分析ch01.1
编写一个程序解决选择问题. 令 k = N / 2, 也就是找第k个最大数.
//Exercise 1.1 :
//Write a program to solve the selection problem. Let k = n/2. that is find the k_th max num in N array.
//Draw a table showing the running time of your program for various values of n]]></description><category></category></item><item><title><![CDATA[3. 容器的分类与测试 - array]]></title><link>https://blog.youkuaiyun.com/zzbeagle/article/details/107447672</link><guid>https://blog.youkuaiyun.com/zzbeagle/article/details/107447672</guid><author>zzbeagle</author><pubDate>Sun, 19 Jul 2020 17:05:37 +0800</pubDate><description><![CDATA[array是一种固定长度的sequence container(顺序容器)
/*
 * @file: container_test.cpp
 */

#include "container.h"

int main(int argc, char **argv)
{
        jj01::test_array();
        return 0;
}


辅助测试方法
/*
 * @file: helper.h
 */
#ifndef __HELPER__
#define __HELPER__
us]]></description><category></category></item><item><title><![CDATA[C++类型自动推导auto 和 decltype]]></title><link>https://blog.youkuaiyun.com/zzbeagle/article/details/107416617</link><guid>https://blog.youkuaiyun.com/zzbeagle/article/details/107416617</guid><author>zzbeagle</author><pubDate>Fri, 17 Jul 2020 20:34:15 +0800</pubDate><description><![CDATA[C++11之前数据类型在编译的时候必须显示指定, 在新版本的C++中, 许多关键字可以让编译器自动推导出数据类型, 虽然这回略微增添编译的时间, 但对最终的程序的运行时间没有任何影响, 这给编写程序带来了很大的便利.

auto
用于声明变量时, 根据变量的值推导出变量的类型
示例1:// C++ program to demonstrate working of auto 
// and type inference 
#include &lt;bits/stdc++.h&gt; 
using names]]></description><category></category></item><item><title><![CDATA[ubuntu18.04 64位运行32位的arm-openwrt-linux-gnueabi-gcc]]></title><link>https://blog.youkuaiyun.com/zzbeagle/article/details/107415782</link><guid>https://blog.youkuaiyun.com/zzbeagle/article/details/107415782</guid><author>zzbeagle</author><pubDate>Fri, 17 Jul 2020 19:16:48 +0800</pubDate><description><![CDATA[问题:
在ubuntu18.04上用32位的工具链交叉编译程序是发现工具链不可用:
/bin/arm-openwrt-linux-gcc command not found

/bin/arm-openwrt-linux-gcc: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
Makefile:14: recipe for ta..]]></description><category></category></item><item><title><![CDATA[已知一系列依赖关系, 求解并输出正常的服务器]]></title><link>https://blog.youkuaiyun.com/zzbeagle/article/details/107362259</link><guid>https://blog.youkuaiyun.com/zzbeagle/article/details/107362259</guid><author>zzbeagle</author><pubDate>Wed, 15 Jul 2020 17:50:46 +0800</pubDate><description><![CDATA[am-an(m, n为小于3000的正整数), 表示am依赖于an, 若an损坏, 则am也不能工作,
现在输入一系列am-an的依赖关系, 以 ‘,’ 分割, 并输入损坏的部件ax, 按升序输出正常的ay.
本题输入输出严格遵循要求, 涉及到字符串处理, 排序等
/*
 * @author: garret
 * @date:  2020/07/15
 * @comipler: gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
 */
#include &lt;stdio.h&]]></description><category></category></item><item><title><![CDATA[局部跳转和非局部跳转]]></title><link>https://blog.youkuaiyun.com/zzbeagle/article/details/107130876</link><guid>https://blog.youkuaiyun.com/zzbeagle/article/details/107130876</guid><author>zzbeagle</author><pubDate>Sat, 04 Jul 2020 23:09:32 +0800</pubDate><description><![CDATA[局部跳转goto
虽然很多书籍对goto建议 “谨慎使用, 或者根本不用”, 然而当一个函数的多个分支需要一个统一出口时, goto语句就非常必要了.  Linux之父Linus在Linux中大量使用goto, 也是在启示着我们可以合理使用goto语句.
在高通的qsdk中的time_genoff_qmi.c就有这么一段code.

int time_genoff_operation(time_genoff_info_type *pargs)
{
        if (connect(sock_id, .]]></description><category></category></item><item><title><![CDATA[C Interfaces and Implementations 资源]]></title><link>https://blog.youkuaiyun.com/zzbeagle/article/details/107127056</link><guid>https://blog.youkuaiyun.com/zzbeagle/article/details/107127056</guid><author>zzbeagle</author><pubDate>Sat, 04 Jul 2020 17:07:50 +0800</pubDate><description><![CDATA[c语言接口与实现创建可重用软件的技术
资源链接:
中文 https://www.52doc.com/detail/3255
英文 https://b-ok.cc/book/1269893/492835

]]></description><category></category></item><item><title><![CDATA[vfork fork clone execv]]></title><link>https://blog.youkuaiyun.com/zzbeagle/article/details/107114505</link><guid>https://blog.youkuaiyun.com/zzbeagle/article/details/107114505</guid><author>zzbeagle</author><pubDate>Fri, 03 Jul 2020 20:27:33 +0800</pubDate><description><![CDATA[clone是Linux为创建线程设计的（虽然也可以用clone创建进程）。所以可以说clone是fork的升级版本，不仅可以创建进程或者线程，还可以指定创建新的命名空间（namespace）、有选择的继承父进程的内存、甚至可以将创建出来的进程变成父进程的兄弟进程等等。clone和fork的调用方式也很不相同，clone调用需要传入一个函数，该函数在子进程中执行。此外，clone和fork最大不同在于clone不再复制父进程的栈空间，而是自己创建一个新的。

fork()是将父进程的全部资源复制给了子进程。而]]></description><category></category></item><item><title><![CDATA[musl-libc 和 glibc]]></title><link>https://blog.youkuaiyun.com/zzbeagle/article/details/107113688</link><guid>https://blog.youkuaiyun.com/zzbeagle/article/details/107113688</guid><author>zzbeagle</author><pubDate>Fri, 03 Jul 2020 19:53:11 +0800</pubDate><description><![CDATA[客户反馈说在编译器下找不到libpthread,
libpthread is integrated into musl libc, 在musl-libc中, libpthread库整合到 libc 库中
用objdump -Tt libc.so.1 | grep pthread_create确认

]]></description><category></category></item><item><title><![CDATA[nm和readelf命令的区别]]></title><link>https://blog.youkuaiyun.com/zzbeagle/article/details/106901190</link><guid>https://blog.youkuaiyun.com/zzbeagle/article/details/106901190</guid><author>zzbeagle</author><pubDate>Mon, 22 Jun 2020 14:28:40 +0800</pubDate><description><![CDATA[一般来说，对于一个so库有两个符号表，一个是“正常的”（在.symtab和.strtab节中）。一个是动态的（.dynsym和.dynstr节中）。如果这个两个表被移除，那么so库就完全没有用了。动态符号表的符号只被用于动态加载器运行时的加载。而“正常”的符号表，一般是用来调试的，里面的函数符号，是没有被导出的（一般是一些静态函数），所以不可能被外部程序使用。“正常”的符号表里面的函数符号，也不会在动态符号表中。
可以用 nm -D 和 readelf -s这两个命令来显示一个so文件的动态符号表信息。链接]]></description><category></category></item></channel></rss>