進程啟動時自動開啟三個標準檔案:標準輸入(stdin,描述符 0)、標準輸出(stdout,1)、標準錯誤(stderr,2)。stdin 可讀,預設鍵盤;stdout/stderr 可寫,預設螢幕。
FILE*)#include <stdio.h> FILE *fopen(const char *path, const char *mode); // 成功回傳檔案指標,失敗回傳 NULL int fclose(FILE *stream);
mode 常用:r(讀)、w(寫,截斷)、a(附加)、r+/w+/a+(讀寫)、b(二進位,Linux 可省略但建議保留跨平台相容)ab/a+b 適合多進程寫同一檔案保證資料完整性0666 & ~umask 決定DIR*)#include <sys/types.h> #include <dirent.h> DIR *opendir(const char *name); // 開啟目錄,失敗回傳 NULL struct dirent *readdir(DIR *dir); // 讀取目錄項,結束回傳 NULL void rewinddir(DIR *dir); // 重置讀取位置到目錄開頭 int closedir(DIR *dir); // 關閉目錄
讀取流程:opendir → 迴圈 readdir → (可選)rewinddir 重讀 → closedir。
char *fgets(char *s, int size, FILE *stream); // 讀一行(含 '\n'),size 需 ≥ 行長+2 int fputs(const char *s, FILE *stream); // 寫一行(不自動加 '\n') // stdin/stdout 對應鍵盤/螢幕
fgets 讀完一行指標自動指向下一行;buf[strlen(buf)-1] 為 '\n'。puts 會自動加換行,fputs 不會。
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); // 回傳成功讀寫的區塊數(非位元組數),錯誤或 EOF 回傳 0
參數:ptr 緩衝區位址,size 單一區塊大小,nmemb 區塊個數,stream 檔案指標。
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char sNo[5];
char sName[20];
double score;
} STUDENT;
int main() {
STUDENT stu[3] = {{"0001", "趙軍", 89}, {"0002", "李千", 90}, {"0003", "張芳", 100}};
STUDENT stu2;
FILE *fp = fopen("d:\\b.txt", "wb+");
if (!fp) { printf("Can not open!\n"); exit(0); }
fwrite(stu, sizeof(STUDENT), 3, fp); // 寫入 3 筆記錄
rewind(fp); // 指標回檔頭
fseek(fp, sizeof(STUDENT), SEEK_SET); // 跳過第 1 筆
fread(&stu2, sizeof(STUDENT), 1, fp); // 讀取第 2 筆
printf("%s-->%s-->%lf\n", stu2.sNo, stu2.sName, stu2.score);
fclose(fp);
return 0;
}