Skip to content

Blog

Linux如何设置用户长时间不操作就自动登出?

引言

当我们登录Linux系统后,如果长时间不操作,比如忘记关闭终端窗口了,怎么做到用户自动退出登录呢?

$ ls -l /etc/profile
-rw-r--r-- 1 root root 1819 Apr  1  2020 /etc/profile

这个文件是系统环境变量的配置文件,并且只有root有修改权限;如果能够在这个文件里面做一些设置,那么每个用户登录后都会加载里面的配置。

C++疑难杂症(1): 小心std::variant中的bool类型值

引言

比如有这样一段代码:

#include <iostream>
#include <string>
#include <variant>
#include <cassert>

int main(){

  std::variant<std::string, int ,bool, long long int> value{"y"};

  if(std::holds_alternative<std::string>(value)){
    std::cout << "it's  a std::string: " << std::get<std::string>(value) << std::endl;
  }else if (value.index() == 0){
    std::cout << "it's a string: " << std::get<std::string>(value) << std::endl;
  }else if (value.index() == 1){
    std::cout << "it's a int: " << std::get<int>(value) << std::endl;
 }else if (value.index() == 2){
    std::cout << "it's a bool: " << std::get<bool>(value) << std::endl;
  }
}

C++实现解释器(2): 词法分析

参照《Writing An Interpreter/Compiler In Go》,改用C++实现。

项目源码: https://github.com/LeslieZhu/monkey-cpp

引言

本篇对应的源码位于目录: src/01/

src
 |01
 | |token
 | | |token.hpp
 | |CMakeLists.txt
 | |test
 | | |main.cpp
 | | |lexer_test.cpp
 | |lexer
 | | |lexer.hpp
 | |repl
 | | |repl.hpp

将源代码转换为词法单元,这个过程叫词法分析,完成这个过程的叫词法分析器(tokenizer/scanner)

C++实现解释器(1): 开篇

参照《Writing An Interpreter/Compiler In Go》,改用C++实现。

项目源码: https://github.com/LeslieZhu/monkey-cpp

引言

实现解释器有很多教程,看了这个基于Go语言的版本后,将采用C++17来重新实现一遍,以体验两种不同编程语言的风格差异。

将采用测试驱动开发(TDD)形式,先写测试用例,再实现代码。

使用的是来自谷歌的gtest(GoogleTest)开源测试框架。

C++语言导学(8): 模板

引言

模板是一个很复杂的主题,这里只涉及最基础的部分。

模板(template)是一个类或一个函数,可以用一组类型或值来进行参数化。

模板是一种编译时机制,一个模板加上一组模板实参被称为特例化,会由编译器根据实参自动生成对应的代码进而编译。

C++语言导学(6): lambda表达式

引言

lambda表达式是一个可执行的代码单元,可以看作是一个匿名内联(inline)函数,下面以匿名函数代指lambda表达式。

定义语法:

[capture list] (parameter list) -> return type { function body }

匿名函数的函数体一般操作比较少,而且匿名函数一般不会反复在多处使用,常是一次性的。