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

Linux C語言檔案操作函式完整指南(一):標準 I/O 與目錄操作

     編輯:關於C

標準串流與檔案描述符

進程啟動時自動開啟三個標準檔案:標準輸入(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。

字串讀寫與格式化 I/O

行導向讀寫

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;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved