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);
}
gcc -c lib.c -o lib.o。ar rcs libmylib.a lib.o。gcc main.c -L. -lmylib -o main(或 gcc main.c libmylib.a -o main)。gcc -fPIC -shared lib.c -o libmylib.so。gcc main.c -ldl -o main(Linux 下需 -ldl 支援 dlopen)。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++ 系統級開發的基本功。靜態庫鏈接時符號內嵌,動態庫運行時解析靈活,根據部署場景選擇。