首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C/C++ 進階實戰:重定向、文件操作、二進制加密與靜態/動態庫製作

     編輯:關於C++

一、標準流重定向與文件掃描

  • stdin/stdout/stderr 是預定義 FILE*,可用 fscanf/fprintf 替代 scanf/printf。
  • freopen("file", "r", stdin) 實現輸入重定向;freopen("out", "w", stdout) 實現輸出重定向。
  • fgetc/fputc 單字符讀寫;fgets/fputs 行讀寫;fread/fwrite 二進制塊讀寫。

二、二進制文件加密(異或法)

異或運算自逆:enc = data ^ key; dec = enc ^ key。對文件逐字節異或固定鍵值(或循環密鑰)即可實現簡易加密。

void xor_file(const char* in, const char* out, const char* key, int keylen) {
    FILE *fi = fopen(in, "rb"), *fo = fopen(out, "wb");
    int ch, idx = 0;
    while ((ch = fgetc(fi)) != EOF) {
        fputc(ch ^ key[idx++ % keylen], fo);
    }
    fclose(fi); fclose(fo);
}

三、靜態庫製作與使用

  1. 編譯源文件為目標文件:gcc -c lib.c -o lib.o。
  2. 打包為靜態庫:ar rcs libmylib.a lib.o。
  3. 主程序編譯鏈接:gcc main.c -L. -lmylib -o main(或 gcc main.c libmylib.a -o main)。

四、動態庫製作與運行時加載

  1. 編譯位置無關代碼:gcc -fPIC -shared lib.c -o libmylib.so。
  2. 編譯主程序:gcc main.c -ldl -o main(Linux 下需 -ldl 支援 dlopen)。
  3. 運行時加載:
void* handle = dlopen("./libmylib.so", RTLD_LAZY);
typedef int (*AddFunc)(int,int);
AddFunc add = (AddFunc)dlsym(handle, "add");
add(3,5);
dlclose(handle);

Windows 對應 LoadLibrary/GetProcAddress/FreeLibrary。

五、總結

掌握文件 IO、二進制處理、庫製作鏈接是 C/C++ 系統級開發的基本功。靜態庫鏈接時符號內嵌,動態庫運行時解析靈活,根據部署場景選擇。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved