0%

Shell编程中常用的文件描述符有3个:
0:stdin,标准输入,默认指的是键盘输入
1:stdout,标准输出,默认指的是屏幕输出
2:stderr,标准错误输出,默认值得是屏幕输出

重定向简单例子
命令举例 含义
cmd > file 把 stdout 重定向到 file 文件中
cmd >> file 把 stdout 重定向到 file 文件中(追加)
cmd 1> fiel 把 stdout 重定向到 file 文件中
cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 文件中
cmd 2> file 把 stderr 重定向到 file 文件中
cmd 2>> file 把 stderr 重定向到 file 文件中(追加)
cmd >> file 2>&1 把 stderr 和 stderr 一起重定向到 file 文件中(追加)
cmd < file >file2 cmd 命令以 file 文件作为 stdin,以 file2 文件作为 stdout
cat <>file 以读写的方式打开 file
cmd < file cmd 命令以 file 文件作为 stdin
cmd << delimiter Here document 从 stdin 中读入,直至遇到 delimiter 分界符

SHELL读取文件的方法

1
2
3
4
5
//使用read命令读取一行数据
while read myline
do
echo "LINE:"$myline
done < datafile.txt

1
2
3
4
5
#使用read命令读取一行数据
cat datafile.txt | while read myline
do
echo "LINE:"$myline
done

1
2
3
4
5
#读取一行数据
cat datafile.txt | while myline=$(line)
do
echo "LINE:"$myline
done

1
2
3
4
5
#读取一行数据
while myline=$(line)
do
echo "LINE:"$myline
done < datafile.txt

1
2
3
4
5
6
7
#使用read命令读取变量数据
cat datafile.txt | while read paraa parab parac
do
echo "PARAA:"$paraa
echo "PARAB:"$parab
echo "PARAC:"$parac
done

1
2
3
4
5
6
7
#使用read命令读取变量数据
while read paraa parab parac
do
echo "PARAA:"$paraa
echo "PARAB:"$parab
echo "PARAC:"$parac
done < datafile.txt
阅读全文 »

0x00 Java基础编程

书名ISBN作者出版社出版日期备注
Java核心技术 卷1:开发基础(原书第12版) 9787111706410 [美]凯·S.霍斯特曼 机械工业出版社 2022年06月 Z
Java核心技术 卷2:高级特性(原书第12版) 9787111719748 [美]凯·S.霍斯特曼 机械工业出版社 2023年03月 Z
Java实战 第2版 9787115521484 [英]拉乌尔 人民邮电出版社 2019年12月 W
Java8实战 9787115521484 [英]拉乌尔 人民邮电出版社 2019年12月 W
剑指Java 核心原理与应用实践 9787121436642 尚硅谷教育 电子工业出版社 2022年06月 W
阅读全文 »

简单介绍STL对集合操作有标准的算法:

  • 交集set_intersection
  • 并集set_union
  • 差集set_difference
  • 对称差集set_symeetric_difference。

针对这里提及的四个集合运算必须特别注意:

  • 1、第一个算法需保证第一集合和第二集合有序,并从小到大排序,内部使用默认“<”操作符比较元素大小;
  • 2、第二个算法需保证第一集合和第二集合有序,排序方式参照Compare确定,内部使用Compare比较元素大小。
阅读全文 »

在C++11之前,要实现函数对象或者仿函数,主要参考《C++设计新思维》中的Loki库,它采用模板推导的方式来实现。虽然Loki可以模拟函数对象,但其代码看起来比较晦涩,使用又不方便。在C++11以后,开始原生支持函数对象,新标准中的用法简单清晰,所有的可调用对象有了统一的调用方式,极易上手。本文总结函数对象的各种使用方法。

std::function的定义

1
2
3
#include <functional>
template< class R, class... Args >
class function<R(Args...)>; // R表示返回值,Args表示函数参数

类模板std::function是通用多态函数封装器。std::function的实例能存储、复制及调用任何可调用目标,包括函数、lambda表达式、bind表达式或其他函数对象,还有指向成员函数指针和指向数据成员指针。
存储的可调用对象被称为std::function的目标。若 std::function不含目标,则称它为空。调用空std::function的目标导致抛出std::bad_function_call异常。

阅读全文 »

使用背景

在多线程编程环境中,我们有时希望某个操作只做一次,比如获取一些系统变量;或者某个函数只被调用一次。我们就可以采用系统提供的std::call_once来保证。

我们再看下call_once的定义:

1
2
template< class Callable, class... Args >
void call_once( std::once_flag& flag, Callable&& f, Args&&... args );
阅读全文 »

隐式类型转换带来的问题

我们首先看下面的这个例子,它可编译也可执行,最终结果是“TDemo::print 55”。有理由推断,实例化一个对象时,编译器自动将55这个整数转换成了“class TDemo”。类TDemo定义了一个单参数构造函数,而C++标准中,“单参数构造函数,可以完成从形参到该类型的一个隐式转换”,所以编译器能够完成从int类型到TDemo的类型转换。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>

class TDemo
{
public:
TDemo(int num);
void print() const
{
std::cout << "TDemo::print "<< i_num << std::endl;
}

private:
int i_num;
};

TDemo(int num):i_num(num){}

int main()
{
TDemo demo = 55;
demo.print();

return 0;
}
阅读全文 »

C++继承机制的相关知识点

继承机制,就是利用已有的数据类型来定义新的数据类型,新数据类型将拥有基类的成员。派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承;从多个基类派生的继承称为多继承。

单继承语法:

1
2
3
4
class <派生类名称>:<继承方式><基类名>
{
//派生类新定义成员
};

多继承语法:

1
2
3
4
class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,......
{
//派生类新定义成员
};
阅读全文 »

C++ Primer的强烈建议

强制类型转换关闭或挂起了正常的类型检查。强烈建议避免使用强制类型转换,不依赖类型转换也能写出很好的C++程序。

这个建议在如何看待 reinterpret_cast 的使用时非常重要。此类强制转换总是非常危险的。相似地,使用价格const_cast也总是预示着设计权限。设计合理的系统应不需要使用强制转换抛弃const特性。其他的强制转换,如static_cast和dynamic_cast,各有各的用途,但都不应频繁使用。每次使用强制转换前,程序员应该仔细考虑是否还有其他不同的方法可以达到同一目的。如果非强制转换不可,则应限制强制转换值的作用域,并且记录所有假定涉及的类型,这样能减少错误发生的机会。

阅读全文 »

导语:C++中用“虚”的来命名的概念,涉及:

  • 虚函数
  • 虚析构函数
  • 纯虚函数
  • 虚基类

本文简要的说明下在面临什么样的问题下使用相应的技术、这些概念又是如何解决问题的。

阅读全文 »

基础图书

书名 ISBN 作者 出版社 出版日期 备注
C++ Primer 中文版 第5版 9787121155352 [美]李普曼 电子工业出版社 2013-09-01 P
C++ Templates 第2版 中文版 9787115601513 [美]范德沃德,约祖蒂斯 人民邮电出版社 2024-01-01
C++ Templates 第2版 英文版 9787121155352 [美]范德沃德,约祖蒂斯 人民邮电出版社 2018-05-01 P
C++ Templates 中文版 9787115479938 [美]范德沃德,约祖蒂斯 人民邮电出版社 2013-04-01 P
深入应用C++11:代码优化与工程级应用 9787111500698 祁宇 机械工业出版社 2015-05-01 P,JV
深入理解C++11:C++ 11新特性解析与应用 9787111426608 Michael Wong 机械工业出版社 2013-06-01 P,JV
现代C++语言核心特性解析 9787115564177 谢丙堃 人民邮电出版社 2021-10-01 P,JV
学习C++20(中文版) 9787302625438 [美]Paul J. Deitel,[美]Harvey M. Deitel 清华大学出版社 2023-05-01
标准C++输入输出流与本地化 9787115090522 万东旭,陈冀康 人民邮电出版社 2001-04-01 P
C++ Core Guidelines解析 9787302635772 [德]赖纳·格林 清华大学出版社 2023-07-01
阅读全文 »

参考图书

书名 ISBN 作者 出版社 出版日期 备注
C和指针 9787115522689 [美]肯尼斯·里科 人民邮电出版社 2020-09-01 P
C陷阱与缺陷 9787115521279 [美]安德鲁·凯尼格 人民邮电出版社 2020-08-01 P
C专家编程 9787115521323 [美]彼得·范德林登 人民邮电出版社 2020-09-01 P
C语言接口与实现 创建可重用软件的技术 9787115402523 [美]戴维 R.汉森 人民邮电出版社 2022-07-01

上文 supervisor基本使用方法教程,我们重点了supervisor的基本使用方法,并未对它进行过多的展开。我们知道supervisor有三个重要的部分 supervisord、supervisorctl、inet_http_server 组成,但我认为隐藏在三部分后面的配置文件,才需要重点关注和学习,毕竟它控制着所有的表现属性。为了比较好的掌握supervisor的使用,本文我们对supervisor的配置文件进行重点分析。

阅读全文 »

Supervisor is a client/server system that allows its users to monitor and control a number of processes on UNIX-like operating systems.

Supervisor是一个在类UNIX系统上,监控控制大量进程的客户端/服务端系统。其主要功能包括程序自动启动、程序奔溃后自动重启,指定进程数目等等。本文是Supervisor安装、配置和使用的简单教程。

阅读全文 »

glibc是标准C库的GNU实现。我们采用C/C++所写的程序,运行时基本都依赖与它。如果我们想看当前机器glibc的源代码,首先需要知道当前机器glibc的版本号,然后到glibc的官网下载对应版本的源代码。

阅读全文 »

背景

当前的工作与SVN有关,今天使用SVN库编写了一个小程序,编译代码时发现编译器告警:”warning: ‘svn_client_ls2’ is deprecated (declared at /home/svn/apps/svn/include/subversion-1/svn_client.h:4942)”。

1
2
3
4
5
6
7
svn@linux-rwdx:~/objs/motadou> make
g++ webdav.cpp -o webdav -I/home/svn/apps/svn/include/subversion-1 -I/home/svn/apps/neon/include/neon -I/home/svn/apps/apr-util/include/apr-1 -I/home/svn/apps/apr/include/apr-1 -I/home/svn/apps/sqlite/include -I/home/svn/apps/ssl/include/openssl\
-L/home/svn/apps/svn/lib -lsvn_client-1 -lsvn_wc-1 -lsvn_fs-1 -lsvn_fs_fs-1 -lsvn_fs_util-1 -lsvn_ra-1 -lsvn_ra_neon-1 -lsvn_ra_local-1 -lsvn_repos-1 -lsvn_delta-1 -lsvn_diff-1 -lsvn_subr-1 -L/home/svn/apps/neon/lib -lneon -L/home/svn/apps/apr-util/lib -laprutil-1 -L/home/svn/apps/apr/lib -lapr-1 -pthread /home/svn/apps/sqlite/lib/libsqlite3.a -L/home/svn/apps/ssl/lib -lssl -lcrypto -lz

webdav.cpp: In function 'int svn_list(Handle&, const std::string&)':
webdav.cpp:120: warning: 'svn_client_ls2' is deprecated (declared at /home/svn/apps/svn/include/subversion-1/svn_client.h:4942)
webdav.cpp:120: warning: 'svn_client_ls2' is deprecated (declared at /home/svn/apps/svn/include/subversion-1/svn_client.h:4942)
阅读全文 »