P 開頭的標準庫函數涵蓋了文件名解析、內存直接訪問、錯誤處理、圖形繪製、多項式計算、數學運算、格式化輸出、字符/字符串輸出、環境變量操作、圖像處理、像素操作、文本屏幕操作等極廣泛的領域。本文系統梳理這些函數的語法、功能與實戰示例。
函數原型: char *parsfnm(const char *cmdline, struct fcb *fcbptr, int opt);
功能: 從命令行字符串解析文件名並填充 FCB (File Control Block) 結構,屬於 DOS 時代遺留接口。
函數原型:
int peek(unsigned int segment, unsigned int offset);char peekb(unsigned int segment, unsigned int offset);功能: 直接讀取指定段:偏移地址的內存值。常用於 DOS 環境下檢鍵盤狀態、視頻內存等。
示例:檢測鍵盤鎖鍵狀態
#include <dos.h>
#include <stdio.h>
int main(void) {
unsigned int kb_flags = peekb(0x0040, 0x0017);
printf("Keyboard status:\n");
printf("Right Shift: %s\n", (kb_flags & 1) ? "On" : "Off");
printf("Left Shift: %s\n", (kb_flags & 2) ? "On" : "Off");
printf("Ctrl: %s\n", (kb_flags & 4) ? "On" : "Off");
printf("Alt: %s\n", (kb_flags & 8) ? "On" : "Off");
printf("Scroll Lock: %s\n", (kb_flags & 16) ? "On" : "Off");
printf("Num Lock: %s\n", (kb_flags & 32) ? "On" : "Off");
printf("Caps Lock: %s\n", (kb_flags & 64) ? "On" : "Off");
return 0;
}
函數原型:
void poke(unsigned int segment, unsigned int offset, int value);void pokeb(unsigned int segment, unsigned int offset, char value);功能: 直接向指定段:偏移地址寫入數據。極度危險,錯誤使用會導致系統崩潰,現代受保護模式 OS 通常禁止應用程序使用。
函數原型: void perror(const char *s);
功能: 將參數字符串與當前 errno 對應的系統錯誤信息輸出到標準錯誤流。
示例:
#include <stdio.h>
int main(void) {
FILE *fp = fopen("nonexist.txt", "r");
if (!fp) perror("Unable to open file");
return 0;
}
函數原型: void far pieslice(int x, int y, int stangle, int endangle, int radius);
功能: 以 (x,y) 為圓心,繪製從起始角度到結束角度的扇形並填充。
函數原型: double poly(double x, int n, const double c[]);
功能: 計算多項式 c[0] + c[1]*x + c[2]*x^2 + ... + c[n]*x^n 的值。係數數組按冪次升序排列。
詳見 L 開頭函數指南 中的同名函數說明。
函數原型: int printf(const char *format, ...);
功能: C 語言最核心的格式化輸出函數,支持豐富的格式控制符。
函數原型: int putc(int c, FILE *stream);
函數原型: int putchar(int c);
等價於: putc(c, stdout)
函數原型: int putch(int c);
特點: 直接輸出到控制台,不經標準 I/O 緩衝,常用於交互式程序。
函數原型: int puts(const char *s);
特點: 自動在末尾添加換行符。
函數原型: int putenv(char *string);
功能: 將 name=value 形式的字符串加入進程環境表。注意:傳入的字符串指針會被環境表直接引用,不能釋放或修改該緩衝區。
函數原型: void far putimage(int x, int y, void far *bitmap, int op);
功能: 將之前用 getimage 獲取的位圖繪製到指定位置。op 支持 COPY_PUT、XOR_PUT、OR_PUT、AND_PUT、NOT_PUT 等混合模式。
函數原型: void far putpixel(int x, int y, int color);
功能: 在指定座標繪製指定顏色的像素點。
函數原型: int puttext(int left, int top, int right, int bottom, void *source);
功能: 配合 gettext 實現文本屏幕區域的保存與恢復。
函數原型: int putw(int w, FILE *stream);
功能: 以二進制形式寫入整數,配合 getw 讀取。注意跨平台字節序問題。
現代開發建議:
parsfnm、FCB 結構:屬於 DOS 1.x 時代遺產,現代開發請使用 fopen、stat、glob 等 POSIX/ISO C 標準接口。putenv:線程不安全,多線程環境下建議使用 setenv (POSIX) 或 Windows API SetEnvironmentVariable。