Linux常用命令
# 查看前几行
head --lines=2 README.md
# 查看尾几行
tail --lines=2 README.md
# ctrl a 将光标快速移动到命令行的开头
# ctrl e 将光标快速移动到命令行的末尾
# 查看全文 q退出 可上下翻滚
less README.md
shell脚本
${ff#week} # 掐头,把ff前面的week去掉
${ff%week} # 去尾,把ff尾部的week去掉
makefile
源文件
// functions.h ///
#ifndef _FUNCTIONS_H_
#define _FUNCTIONS_H
void printhello();
int factorial(int n);
#endif
// factorial.cpp //
# include "functions.h"
int factorial(int n) {
if (n == 1) return 1;
else return n * factorial(n -1);
}
// printhello.cpp //
# include "functions.h"
using namespace std;
void printhello() {
int i;
cout << "Hello World!"<< endl;
}
/// main.cpp ///
#include "functions.h"
using namespace std;
int main() {
printhello();
cout << "This is main:"<< endl;
cout << "The factorial of 5 is: "<< factorial(5) << endl;
return 0;
}
C++编译
g++ main.c factorial.cpp factorial.cpp -o main # 一步到位
# 1.预编译
# 2.编译
g++ main.cpp -c
g++ factorial.cpp -c
g++ printhello.cpp -c
## result: 生成 main.o 和 printhello.o 和 factorial.o
# 3.链接
g++ *.o -o main # 将所以.o文件链接在一起
## result:生成可执行文件 main
# 4.执行
./main
Makeflie
内容:
######################## VERSION 1 ############################
# 生成 hello 的目标,目标依赖于 main.cpp printhello.cpp factorial.cpp
hello: main.cpp printhello.cpp factorial.cpp
# (注意tab) 用下列命令生成
g++ -o hello main.cpp printhello.cpp factorial.cpp
######################## VERSION 2 ############################
CXX = g++ # 指定编译器
TARGET = hello # 目标文件
OBJ = main.o printhello.o factorial.o #
$(TARGET): $(OBJ) # TARGET 依赖于 OBJ ,
$(CXX) -o $(TARGET) $(OBJ)
main.o: main.cpp
$(CXX) -c main.cpp
printhello.o: printhello.cpp
$(CXX) -c printhello.cpp
factorial.o: factorial.cpp
$(CXX) -c factorial.cpp
######################## VERSION 3 ############################
CXX = g++
TARGET = hello
OBJ = main.o printhello.o factorial.o
CXXFLAGS = -c -Wall # 编译选项( -c 是生成.o文件, -Wall 启用编译器的所有警告信息)
$(TARGET): $(OBJ)
$(CXX) -o $@ $^ # $@ 这里表示 $(TARGET),$^ 这里表示 $(OBJ)
%.o: %.cpp
$(CXX) $(CXXFLAGS) $< -o $@ # $< 这里表示 %.cpp 的第一个,$@ 这里表示 %.o
.PHONY: clean # 防止 make clean 歧义,存在clean文件夹
clean:
rm -f *.o $(TARGET) # make clean 之后执行这句
######################## VERSION 4 ############################
CXX = g++
TARGET = hello
SRC = $(wildcard *.cpp) # 当前目录下所有的 cpp 文件
# patsubst 路径替换,将$(SRC)下的所有.cpp文件替换成.o文件
OBJ = $(patsubst %.cpp, %.o, $(SRC))
CXXFLAGS = -c -Wall # 编译选项( -c 是生成.o文件, -Wall 启用编译器的所有警告信息)
$(TARGET): $(OBJ)
$(CXX) -o $@ $^ # $@ 这里表示 $(TARGET),$^ 这里表示 $(OBJ)
%.o: %.cpp
$(CXX) $(CXXFLAGS) $< -o $@ # $< 这里表示 %.cpp 的第一个,$@ 这里表示 %.o
.PHONY: clean # 防止 make clean 歧义,存在clean文件夹
clean:
rm -f *.o $(TARGET) # make clean 之后执行这句
执行命令
# 当前目录下执行
make # 如果当前目录下不是Makefile,可以使用 make -f Makefile
# 清理.o 和可执行文件
make clean
Cmake
CmakeList.txt
内容:
cmake_minimum_required(VERSION 3.10)
project(hello)
add_executable(hello main.cpp factorial.cpp printhello.cpp)
执行:
mkdir build
cd build
cmake .. # 上一层目录上寻找,在 build 中生成 Makefile
make # 编译 Makefile
zip函数
这些函数主要来自 libzip
库,用于处理 .zip
文件。
1. zip_open
zip* za = zip_open(zipFilePath.c_str(), ZIP_RDONLY, &err);
- 功能: 打开一个
.zip
文件。 - 参数:
zipFilePath.c_str()
: 要打开的.zip
文件的路径。ZIP_RDONLY
: 以只读模式打开压缩包。&err
: 用于存储错误码的指针。如果打开失败,err
会被设置为相应的错误码。
- 返回值: 返回一个指向
zip
结构体的指针,如果打开失败,则返回nullptr
。
2. zip_get_num_entries
zip_int64_t num_entries = zip_get_num_entries(za, 0);
- 功能: 获取
.zip
文件中包含的条目数量,即压缩包中包含的文件或目录的数量。 - 参数:
za
: 指向打开的zip
结构体的指针。0
: 此参数用于控制列出压缩包中的内容,通常设置为0
。
- 返回值: 返回
.zip
文件中包含的条目数量。
3. zip_get_name
const char* name = zip_get_name(za, i, 0);
- 功能: 获取
.zip
文件中某个条目的名称。 - 参数:
za
: 指向打开的zip
结构体的指针。i
: 条目的索引,从0
开始。0
: 此参数用于控制是否返回压缩包中的名称,通常设置为0
。
- 返回值: 返回指向条目名称的指针(C字符串)。如果索引无效或发生错误,则返回
nullptr
。
4. zip_stat
zip_stat_t st;
if (zip_stat(za, "version.json", 0, &st) == 0) {
// version.json 文件存在
}
- 功能: 获取指定条目的详细信息。
- 参数:
za
: 指向打开的zip
结构体的指针。"version.json"
: 要获取信息的文件名称。0
: 额外的选项,通常设置为0
。&st
: 一个zip_stat_t
结构体,用于存储条目的详细信息(如大小、压缩方式等)。
- 返回值: 成功时返回
0
,失败时返回-1
。
5. zip_close
zip_close(za);
- 功能: 关闭
.zip
文件,释放资源。 - 参数:
za
: 指向打开的zip
结构体的指针。
- 返回值: 成功时返回
0
,如果失败则返回-1
。
总结
zip_open
: 用于打开.zip
文件。zip_get_num_entries
: 获取压缩包内的条目数量。zip_get_name
: 获取压缩包内指定条目的名称。zip_stat
: 获取压缩包内某个文件的详细信息。zip_close
: 关闭.zip
文件并释放资源。