FIX: merge gcc_g++ create shared lib
FIX: C in linux read KEY FIX: .bashrc echo DIR FIX: gcc_g++ create shared lib
This commit is contained in:
parent
5f3ef05755
commit
cf4b2cb324
@ -4,8 +4,8 @@
|
||||
[[ $- != *i* ]] && return
|
||||
|
||||
# 历史记录配置
|
||||
HISTSIZE=5000 # 内存中保存的历史记录数量
|
||||
HISTFILESIZE=5000 # 历史文件最大行数
|
||||
HISTSIZE=10000 # 内存中保存的历史记录数量
|
||||
HISTFILESIZE=10000 # 历史文件最大行数
|
||||
HISTCONTROL=ignoreboth # 忽略重复命令和空格开头的命令
|
||||
shopt -s histappend # 追加历史而不是覆盖
|
||||
|
||||
@ -27,9 +27,9 @@ alias fgrep='fgrep --color=auto'
|
||||
alias egrep='egrep --color=auto'
|
||||
|
||||
# 更详细的ls别称
|
||||
alias ll='ls -alFh --group-directories-first'
|
||||
alias l='ls -alFh --group-directories-first'
|
||||
alias la='ls -A'
|
||||
alias l='ls -CF'
|
||||
# alias l='ls -CF'
|
||||
|
||||
# PS1提示符
|
||||
|
||||
@ -64,12 +64,12 @@ parse_git_branch() {
|
||||
|
||||
# 处理路径:长路径时只保留每级目录首字母
|
||||
local DIR=${PWD/#$HOME/\~}
|
||||
if [ ${#DIR} -gt 25 ]; then
|
||||
if [ ${#DIR} -gt 30 ]; then
|
||||
DIR=$(echo $DIR | awk -F '/' '{
|
||||
if (length($0) > 20) {
|
||||
if (length($0) > 30) {
|
||||
for (i=1; i<=NF; i++) {
|
||||
if (i == NF) printf "/%s", $i;
|
||||
else if (length($i) > 0) printf "/%.2s", $i;
|
||||
if (i == NF) printf "%s", $i;
|
||||
else printf "%.3s/", $i;
|
||||
}
|
||||
}
|
||||
else print $0;
|
||||
@ -93,14 +93,13 @@ parse_git_branch() {
|
||||
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
|
||||
|
||||
# 安全操作确认
|
||||
alias rm='rm -i'
|
||||
alias cp='cp -i'
|
||||
alias mv='mv -i'
|
||||
alias rr='rm -i'
|
||||
#alias cp='cp -i'
|
||||
#alias mv='mv -i'
|
||||
|
||||
# 快速导航
|
||||
alias ..='cd ..'
|
||||
alias ...='cd ../..'
|
||||
alias ....='cd ../../..'
|
||||
alias ~='cd ~'
|
||||
|
||||
# 网络相关
|
||||
|
59
program/c_cpp/linux/key.c
Normal file
59
program/c_cpp/linux/key.c
Normal file
@ -0,0 +1,59 @@
|
||||
#include <iostream>
|
||||
#include <unistd.h>
|
||||
#include <termio.h>
|
||||
|
||||
static struct termios original;
|
||||
|
||||
void enable_raw_mode() {
|
||||
tcgetattr(STDIN_FILENO, &original);
|
||||
struct termios raw = original;
|
||||
raw.c_lflag &= ~(ICANON | ECHO);
|
||||
raw.c_cc[VMIN] = 0;
|
||||
raw.c_cc[VTIME] = 1;
|
||||
tcsetattr(STDIN_FILENO, TCSAFLUSH, &raw);
|
||||
}
|
||||
|
||||
void disable_raw_mode() {
|
||||
tcsetattr(STDIN_FILENO, TCSAFLUSH, &original);
|
||||
}
|
||||
|
||||
int kbhit() {
|
||||
char ch;
|
||||
int n = read(STDIN_FILENO, &ch, 1);
|
||||
if (n == 1) return ch;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int main() {
|
||||
enable_raw_mode();
|
||||
atexit(disable_raw_mode); // 确保程序退出时恢复终端
|
||||
|
||||
printf("Press 'q' to quit\n");
|
||||
while (1) {
|
||||
int key = kbhit();
|
||||
if (key != -1) {
|
||||
printf("Key: %c (0x%02x)\n", key, key);
|
||||
if (key == 'q') break;
|
||||
}
|
||||
|
||||
// 在这里添加逻辑
|
||||
usleep(10000); // 10ms延迟减少CPU占用
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
// struct termios
|
||||
// {
|
||||
// tcflag_t c_iflag; /* input mode flags */
|
||||
// tcflag_t c_oflag; /* output mode flags */
|
||||
// tcflag_t c_cflag; /* control mode flags */
|
||||
// tcflag_t c_lflag; /* local mode flags */
|
||||
// cc_t c_line; /* line discipline */
|
||||
// cc_t c_cc[NCCS]; /* control characters */
|
||||
// speed_t c_ispeed; /* input speed */
|
||||
// speed_t c_ospeed; /* output speed */
|
||||
// #define _HAVE_STRUCT_TERMIOS_C_ISPEED 1
|
||||
// #define _HAVE_STRUCT_TERMIOS_C_OSPEED 1
|
||||
// };
|
||||
|
||||
|
@ -1,41 +0,0 @@
|
||||
#include <iostream>
|
||||
#include <unistd.h>
|
||||
#include <termio.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
int key() {
|
||||
// struct termios
|
||||
// {
|
||||
// tcflag_t c_iflag; /* input mode flags */
|
||||
// tcflag_t c_oflag; /* output mode flags */
|
||||
// tcflag_t c_cflag; /* control mode flags */
|
||||
// tcflag_t c_lflag; /* local mode flags */
|
||||
// cc_t c_line; /* line discipline */
|
||||
// cc_t c_cc[NCCS]; /* control characters */
|
||||
// speed_t c_ispeed; /* input speed */
|
||||
// speed_t c_ospeed; /* output speed */
|
||||
// #define _HAVE_STRUCT_TERMIOS_C_ISPEED 1
|
||||
// #define _HAVE_STRUCT_TERMIOS_C_OSPEED 1
|
||||
// };
|
||||
unsigned char in;
|
||||
struct termios new_settings, old_settings;
|
||||
tcgetattr(STDIN_FILENO,&old_settings); //获得stdin 输入
|
||||
new_settings = old_settings;
|
||||
new_settings.c_lflag &= (~ICANON);
|
||||
// new_settings.c_cc[VTIME] = 0;
|
||||
// tcgetattr(STDIN_FILENO,&old_settings); //获得stdin 输入
|
||||
// new_settings.c_cc[VMIN] = 1;
|
||||
tcsetattr(STDIN_FILENO,TCSANOW,&new_settings); //
|
||||
|
||||
in = getchar();
|
||||
|
||||
tcsetattr(STDIN_FILENO,TCSANOW,&old_settings);
|
||||
return in;
|
||||
}
|
||||
|
||||
int main() {
|
||||
while(1)
|
||||
printf(" %d \n", key());
|
||||
return 0;
|
||||
}
|
@ -3,7 +3,7 @@
|
||||
## 目录
|
||||
- [define](#define)
|
||||
- [预定义宏](#预定义宏)
|
||||
- [defined](# defined)
|
||||
- [defined](#defined)
|
||||
- [ifdef](#ifdef)
|
||||
- [ifndef](#ifndef)
|
||||
- [undef](#undef) : 若要修改一个宏,先移除再定义
|
||||
@ -51,5 +51,6 @@
|
||||
---
|
||||
|
||||
## pragma
|
||||
由编译器定义的预处理指令,若不支持则无操作
|
||||
|
||||
`#pragma once` 确保头文件只被包含一次
|
||||
|
@ -5,9 +5,9 @@
|
||||
|
||||
## INDEX
|
||||
|
||||
- [字符串库函数](# std-string)
|
||||
- [内存操作标准库函数](# std-mem)
|
||||
- [与string容器转换](# to-string)
|
||||
- [字符串库函数](#std-string)
|
||||
- [内存操作标准库函数](#std-mem)
|
||||
- [与string容器转换](#to-string)
|
||||
|
||||
---
|
||||
|
@ -2,15 +2,13 @@
|
||||
+ 使用const关键字
|
||||
+ 避免频繁进行内存分配和释放
|
||||
+ 尽量减少值传递,多用引用来传递参数
|
||||
+ 局部变量VS静态变量(多次调用局部更快,因为局部变量可以读入寄存器,静态不行)
|
||||
+ 局部变量VS静态变量(多次调用可能局部更快)
|
||||
+ ++i和i++的效率问题(使用迭代器可能比使用指针更优:迭代器++i可以减少一次构造和析构)
|
||||
+ 避免使用多重继承
|
||||
+ 低级代码使用位运算替代算术运算
|
||||
+ 使用编译器自带的优化选项
|
||||
+ 将小粒度函数声明为内联函数(inline)
|
||||
+ 循环内定义,还是循环外定义对象:由构造函数和复制操作的效率比较决定
|
||||
+ 小函数放在同一循环内效率高,大函数分开放效率更高(由cpu寄存器决定)
|
||||
+ 尽量少使用`dynamic_cast`
|
||||
+ 减少除法运算的使用,除数尽量使用常量,让编译器优化
|
||||
+ 多用直接初始化
|
||||
+ 循环展开加速
|
||||
|
@ -4,7 +4,6 @@
|
||||
- [extern](#extern)
|
||||
- [noexcept](#noexcept)
|
||||
- [重载](#)
|
||||
- [often](#often)
|
||||
|
||||
## extern
|
||||
|
||||
@ -28,20 +27,3 @@ noexcept 的一个重要用途是优化性能,特别是在移动语义中。
|
||||
+ const左值:选择const T&。
|
||||
+ 右值:优先选择T&&, else const T&
|
||||
+ 字面量或临时对象:选择T&&。
|
||||
|
||||
## often
|
||||
|
||||
```
|
||||
abs(x); //求x的绝对值 e.g.abs(-5)=5
|
||||
fabs() //实数绝对值
|
||||
exp(x); //求x的自然指数e^x e.g.exp(1)=2.718282
|
||||
floor(x); //向下取整
|
||||
ceil(x); //向上取整
|
||||
log(x); //求实数x的自然数对数 e.g.log(1)=0
|
||||
pow(x,y); //计算x^y,输出为双精度实数 e.g.pow(2,3)=8
|
||||
sqrt(x); //求x的平方根 e.g.sqrt(25)=5
|
||||
strlen(str);获取字符数组长度(只能用在字符数组)。
|
||||
max(a,b) //两数中最大
|
||||
min(a,b) //两数中最小
|
||||
swap(a,b) //交换两个类型相同的变量
|
||||
```
|
||||
|
@ -1,20 +1,20 @@
|
||||
# c with cpp io
|
||||
|
||||
|
||||
# 目录
|
||||
# INDEX
|
||||
|
||||
- [标准IO流](# IOstream)
|
||||
- [C](# C)
|
||||
- [格式化IO](# 格式化IO)
|
||||
- [字符IO](# charIO)
|
||||
- [Cstring](# Cstring)
|
||||
- [C二进制IO](# Cbin)
|
||||
- [C文件操作](# C-FILE)
|
||||
- [error](# c-error)
|
||||
- [cpp stdio](# cpp stdio)
|
||||
- [cpp fio](# cpp fio)
|
||||
- [关闭缓冲区读取](# ../linux/ncurses.c)
|
||||
- [ANSI](# ./ansi.md)
|
||||
- [标准IO流](#IOstream)
|
||||
- [C](#C)
|
||||
- [格式化IO](#格式化IO)
|
||||
- [字符IO](#charIO)
|
||||
- [Cstring](#Cstring)
|
||||
- [C二进制IO](#Cbin)
|
||||
- [C文件操作](#C-FILE)
|
||||
- [error](#c-error)
|
||||
- [cpp stdio](#cpp stdio)
|
||||
- [cpp fio](#cpp fio)
|
||||
- [关闭缓冲区读取](#../linux/ncurses.c)
|
||||
- [ANSI](#./ansi.md)
|
||||
|
||||
---
|
||||
|
||||
|
@ -76,14 +76,8 @@
|
||||
g++ -o main -l库名 -L库路径 -I头文件路径
|
||||
// g++ -o main -ltest -L/home/e0x1a/test
|
||||
|
||||
#### `-rpath 是 GNU 链接器的一个选项,它会在可执行文件中嵌入运行时库搜索路径`
|
||||
`gcc -o myapp myapp.c -L../libs -lmylib -Wl,--enable-new-dtags,-rpath,'$ORIGIN/../libs'`
|
||||
```
|
||||
-Wl,-rpath,/path/to/libs:
|
||||
-Wl 告诉 GCC 将后面的参数传递给链接器
|
||||
-rpath 是链接器选项
|
||||
/path/to/libs 是要嵌入的运行时搜索路径
|
||||
```
|
||||
|
||||
如果是动态库,需要指定 `LD_LIBRARY_PATH` 环境变量 //待查
|
||||
用 `echo $LD_LIBRARY_PATH` 查看
|
||||
#### 编译主程序时链接动态库
|
||||
- `gcc -o myprogram main.c -L. -lmylib -Wl,-rpath=.`
|
||||
- `-L.` 告诉编译器在当前目录中查找动态库文件
|
||||
- `-lmylib` 链接名为 libmylib.so 的动态库
|
||||
- `-Wl,-rpath=.` 将运行时路径嵌入到可执行文件中,强制程序运行时优先从当前目录加载动态库
|
||||
|
@ -2,17 +2,17 @@
|
||||
`.` 重复上一个操作
|
||||
|
||||
## 目录
|
||||
- [录制宏](# 录制宏)
|
||||
- [打开终端](# 打开终端)
|
||||
- [快捷键](# 快捷键)
|
||||
- [移动](# 移动)
|
||||
- [插入](# 插入)
|
||||
- [修改](# 修改)
|
||||
- [删除](# 删除)
|
||||
- [复制](# 复制)
|
||||
- [基本补全](# 基本补全)
|
||||
- [补全菜单](# 补全菜单)
|
||||
- [vimrc](# ./.vimrc)
|
||||
- [录制宏](#录制宏)
|
||||
- [打开终端](#打开终端)
|
||||
- [快捷键](#快捷键)
|
||||
- [移动](#移动)
|
||||
- [插入](#插入)
|
||||
- [修改](#修改)
|
||||
- [删除](#删除)
|
||||
- [复制](#复制)
|
||||
- [基本补全](#基本补全)
|
||||
- [补全菜单](#补全菜单)
|
||||
- [vimrc](#./.vimrc)
|
||||
|
||||
## 录制宏
|
||||
使用 q[Key] 开始录制宏,再次点击q结束录制
|
||||
|
Loading…
x
Reference in New Issue
Block a user