首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

嵌入式 Linux fopen 打開 /proc/gpio 失敗:排查 errno、文件描述符耗盡、進程權限、掛載點變化

     編輯:程式設計綜合問答

運行一段時間後 `fopen("/proc/gpio", "r")` 返回 NULL。需打印具體錯誤碼定位。

加錯誤診斷代碼

fp = fopen("/proc/gpio", "r");
if (!fp) {
    int err = errno;
    syslog(LOG_ERR, "open /proc/gpio failed: %s (errno=%d)", strerror(err), err);
    // 或 perror("open gpio");
    return;
}

常見 errno 對照

防禦性編程

  • 每次 `fopen` 必配對 `fclose`,用 RAII 或 `goto cleanup` 確保釋放。
  • 定期 `lsof -p ` 監控打開文件數。
  • 若頻繁讀取,考慮 `mmap` 或保持文件句柄常開(單線程輪詢)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
errno宏可能原因
24EMFILE進程文件描述符耗盡(`ulimit -n` 默認 1024),檢查是否有未 close 的 fopen
13EACCES權限不足,/proc/gpio 需 root 或特定 capability
2ENOENT文件不存在,內核模組未載入或掛載點變化
5EIOI/O 錯誤,硬體/驅動異常