ql_fs.h 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880
  1. /*================================================================
  2. Copyright (c) 2021, Quectel Wireless Solutions Co., Ltd. All rights reserved.
  3. Quectel Wireless Solutions Proprietary and Confidential.
  4. =================================================================*/
  5. #ifndef _QL_FS_H_
  6. #define _QL_FS_H_
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10. #include <stdio.h>
  11. #include <sys/types.h>
  12. #include <sys/stat.h>
  13. #include "ql_api_common.h"
  14. #define QL_SEEK_SET 0 /* Seek from beginning of file. */
  15. #define QL_SEEK_CUR 1 /* Seek from current position. */
  16. #define QL_SEEK_END 2 /* Seek from end of file. */
  17. #define QL_MAX_FAC_NVITEM_COUNT 10 /*max factory nvitem, do not modify*/
  18. #ifndef uint8
  19. typedef unsigned char uint8;
  20. #endif
  21. #ifndef uint16
  22. typedef unsigned short uint16;
  23. #endif
  24. #ifndef int16
  25. typedef short int16;
  26. #endif
  27. #ifndef uint
  28. typedef unsigned int uint;
  29. #endif
  30. #ifndef size_t
  31. typedef unsigned int size_t;
  32. #endif
  33. #ifndef int64
  34. typedef long long int int64;
  35. #endif
  36. typedef int QFILE; /* file handler, returned by ql_fopen */
  37. typedef int QL_STATE;
  38. typedef struct
  39. {
  40. int16 fs_index; ///< internal fs index
  41. int16 _reserved; ///< reserved
  42. } QDIR;
  43. typedef struct
  44. {
  45. int d_ino; ///< inode number, file system implementation can use it for any purpose
  46. uint8 d_type; ///< type of file
  47. char d_name[256]; ///< file name
  48. }qdirent;
  49. typedef enum
  50. {
  51. QL_FILE_OK = 0,
  52. QL_FILE_INVALID_INPUT_VALUE = (QL_COMPONENT_STORAGE_FILE << 16) | 400, /* invalid input value */
  53. QL_FILE_LARGER_THAN_FILESIZE = (QL_COMPONENT_STORAGE_FILE << 16) | 401, /* large than file size */
  54. QL_FILE_READ_ZERO = (QL_COMPONENT_STORAGE_FILE << 16) | 402, /* read zero byte */
  55. QL_FILE_DRIVE_FULL = (QL_COMPONENT_STORAGE_FILE << 16) | 403, /* drive full */
  56. QL_FILE_MOV_ERROR = (QL_COMPONENT_STORAGE_FILE << 16) | 404, /* move error */
  57. QL_FILE_FILE_NOT_FOUND = (QL_COMPONENT_STORAGE_FILE << 16) | 405, /* file not found */
  58. QL_FILE_INVALID_FILE_NAME = (QL_COMPONENT_STORAGE_FILE << 16) | 406, /* invalidate file name */
  59. QL_FILE_FILE_ALREADY_EXISTED = (QL_COMPONENT_STORAGE_FILE << 16) | 407, /* file already exist */
  60. QL_FILE_FAILED_TO_CREATE_FILE = (QL_COMPONENT_STORAGE_FILE << 16) | 408, /* failed to create file */
  61. QL_FILE_FAILED_TO_WRITE_FILE = (QL_COMPONENT_STORAGE_FILE << 16) | 409, /* failed to write file */
  62. QL_FILE_FAILED_TO_OPEN_FILE = (QL_COMPONENT_STORAGE_FILE << 16) | 410, /* failed to open file */
  63. QL_FILE_FAILED_TO_READ_FILE = (QL_COMPONENT_STORAGE_FILE << 16) | 411, /* failed to read file */
  64. QL_FILE_EXCEED_MAX_LENGTH = (QL_COMPONENT_STORAGE_FILE << 16) | 412, /* exceed max length */
  65. QL_FILE_REACH_MAX_OPENFILE_NUM = (QL_COMPONENT_STORAGE_FILE << 16) | 413, /* reach max opened file num */
  66. QL_FILE_IS_READONLY = (QL_COMPONENT_STORAGE_FILE << 16) | 414, /* file is the read-only */
  67. QL_FILE_GET_SIZE_FAIL = (QL_COMPONENT_STORAGE_FILE << 16) | 415, /* get file size failed */
  68. QL_FILE_INVALID_FILE_DESCRIPTOR = (QL_COMPONENT_STORAGE_FILE << 16) | 416, /* description invalidate */
  69. QL_FILE_LIST_FILE_FAIL = (QL_COMPONENT_STORAGE_FILE << 16) | 417, /* failed to list file */
  70. QL_FILE_DELETE_FILE_FAIL = (QL_COMPONENT_STORAGE_FILE << 16) | 418, /* failed to delete file */
  71. QL_FILE_GET_DISK_INFO_FAIL = (QL_COMPONENT_STORAGE_FILE << 16) | 419, /* failed to get disk info */
  72. QL_FILE_NO_SPACE = (QL_COMPONENT_STORAGE_FILE << 16) | 420, /* disk no space */
  73. QL_FILE_TIME_OUT = (QL_COMPONENT_STORAGE_FILE << 16) | 421, /*time out */
  74. QL_FILE_FILE_NOT_FOUND_2 = (QL_COMPONENT_STORAGE_FILE << 16) | 422, /* file not found */
  75. QL_FILE_FILE_TOO_LARGE = (QL_COMPONENT_STORAGE_FILE << 16) | 423, /* file too large */
  76. QL_FILE_FILE_ALREADY_EXIST = (QL_COMPONENT_STORAGE_FILE << 16) | 424, /* file already exist */
  77. QL_FILE_INVALID_PARAMETER = (QL_COMPONENT_STORAGE_FILE << 16) | 425, /* invalidate parameter */
  78. QL_FILE_ALREADY_OPERATION = (QL_COMPONENT_STORAGE_FILE << 16) | 426, /* file already open */
  79. QL_FILE_ERROR_GENERAL = (QL_COMPONENT_STORAGE_FILE << 16) | 427,
  80. QL_FILE_RENAME_ERROR = (QL_COMPONENT_STORAGE_FILE << 16) | 428,
  81. QL_FILE_QUIT_DATE_MODE = (QL_COMPONENT_STORAGE_FILE << 16) | 429,
  82. QL_FILE_CLOSE_FAIL = (QL_COMPONENT_STORAGE_FILE << 16) | 430,
  83. QL_FILE_SEEK_FAIL = (QL_COMPONENT_STORAGE_FILE << 16) | 431,
  84. QL_FILE_TELL_FAIL = (QL_COMPONENT_STORAGE_FILE << 16) | 432,
  85. QL_FILE_FAILED_TO_GET_STAT = (QL_COMPONENT_STORAGE_FILE << 16) | 433,
  86. QL_FILE_NOT_EXIST = (QL_COMPONENT_STORAGE_FILE << 16) | 434,
  87. QL_RENAME_FAIL = (QL_COMPONENT_STORAGE_FILE << 16) | 435,
  88. QL_FILE_TRUNCATE_FAIL = (QL_COMPONENT_STORAGE_FILE << 16) | 436,
  89. QL_FILE_NOT_OPEN = (QL_COMPONENT_STORAGE_FILE << 16) | 437,
  90. QL_FILE_DEVICE_READONLY = (QL_COMPONENT_STORAGE_FILE << 16) | 438,
  91. QL_FILE_CREATE_EXCEED = (QL_COMPONENT_STORAGE_FILE << 16) | 450, /* create too many files */
  92. QUEC_FILE_ZIP_INVALID_FILE_NAME = (QL_COMPONENT_STORAGE_FILE << 16) | 439,
  93. QUEC_FILE_ZIP_FILE_NOT_FOUND = (QL_COMPONENT_STORAGE_FILE << 16) | 440,
  94. QUEC_FILE_ZIP_DEL_ERROR = (QL_COMPONENT_STORAGE_FILE << 16) | 441,
  95. QUEC_FILE_ZIP_UNZIP_ERROR = (QL_COMPONENT_STORAGE_FILE << 16) | 442,
  96. QL_DIR_MAKE_FAIL = (QL_COMPONENT_STORAGE_FILE << 16) | 600,
  97. QL_DIR_OPEN_FAIL = (QL_COMPONENT_STORAGE_FILE << 16) | 601,
  98. QL_DIR_CLOSE_FAIL = (QL_COMPONENT_STORAGE_FILE << 16) | 602,
  99. QL_DIR_READ_FAIL = (QL_COMPONENT_STORAGE_FILE << 16) | 603,
  100. QL_DIR_TELL_FAIL = (QL_COMPONENT_STORAGE_FILE << 16) | 604,
  101. QL_DIR_SEEK_FAIL = (QL_COMPONENT_STORAGE_FILE << 16) | 605,
  102. QL_DIR_REMOVE_FAIL = (QL_COMPONENT_STORAGE_FILE << 16) | 606,
  103. QL_DIR_DIR_ALREADY_EXIST = (QL_COMPONENT_STORAGE_FILE << 16) | 607,
  104. QL_DIR_DIR_NOT_EXIST = (QL_COMPONENT_STORAGE_FILE << 16) | 608,
  105. QL_FILE_ERROR_MAX,
  106. }ql_file_errcode_e;
  107. /*****************************************************************
  108. * Function: ql_fopen
  109. *
  110. * Description:
  111. * 打开文件。UFS、EFS、EXNSFFS使用SFFS文件系统,在根目录下只能创建234个文件或目录,在目录下,只能创建202个文件或目录
  112. *
  113. * Parameters:
  114. * file_name [in] 文件名
  115. * mode [in] 模式
  116. *
  117. * Return:
  118. * > 0 成功返回文件ID。
  119. * other 错误码。
  120. *
  121. *****************************************************************/
  122. QFILE ql_fopen(const char *file_name, const char *mode);
  123. /*****************************************************************
  124. * Function: ql_fclose
  125. *
  126. * Description:
  127. * 关闭文件。
  128. *
  129. * Parameters:
  130. * fd [in] 文件ID
  131. *
  132. * Return:
  133. * QL_FILE_OK 成功。
  134. * other 错误码。
  135. *
  136. *****************************************************************/
  137. int ql_fclose(QFILE fd);
  138. /*****************************************************************
  139. * Function: ql_remove
  140. *
  141. * Description:
  142. * 删除文件。
  143. *
  144. * Parameters:
  145. * file_name [in] 文件名
  146. *
  147. * Return:
  148. * QL_FILE_OK 成功。
  149. * other 错误码。
  150. *
  151. *****************************************************************/
  152. int ql_remove(const char *file_name);
  153. /*****************************************************************
  154. * Function: ql_fread
  155. *
  156. * Description:
  157. * 读取文件。
  158. *
  159. * Parameters:
  160. * buffer [out] 读取到的数据
  161. * size [in] 要读取块大小
  162. * num [in] 要读取块个数
  163. * fd [in] 文件ID
  164. *
  165. * Return:
  166. * > 0 成功读取到的字节数。
  167. * other 错误码。
  168. *
  169. *****************************************************************/
  170. int ql_fread(void * buffer, size_t size, size_t num, QFILE fd);
  171. /*****************************************************************
  172. * Function: ql_fwrite
  173. *
  174. * Description:
  175. * 写入文件。
  176. *
  177. * Parameters:
  178. * buffer [in] 要写入的数据
  179. * size [in] 要写入块大小
  180. * num [in] 要写入块个数
  181. * fd [in] 文件ID
  182. *
  183. * Return:
  184. * > 0 成功写入的字节数。
  185. * other 错误码。
  186. *
  187. *****************************************************************/
  188. int ql_fwrite(void * buffer, size_t size, size_t num, QFILE fd);
  189. /*****************************************************************
  190. * Function: ql_nvm_fwrite
  191. *
  192. * Description:
  193. * 写入配置文件。
  194. *
  195. * Parameters:
  196. * config_file_name [in] 配置文件名
  197. * buffer [in] 要写入的数据
  198. * size [in] 要写入块大小
  199. * num [in] 要写入块个数
  200. *
  201. * Return:
  202. * > 0 成功写入的字节数。
  203. * other 错误码。
  204. *
  205. *****************************************************************/
  206. int ql_nvm_fwrite(const char *config_file_name, void *buffer, size_t size, size_t num);
  207. /*****************************************************************
  208. * Function: ql_nvm_fread
  209. *
  210. * Description:
  211. * 读取配置文件。
  212. *
  213. * Parameters:
  214. * config_file_name [in] 配置文件名
  215. * buffer [out] 读取到的数据
  216. * size [in] 要读取块大小
  217. * num [in] 要读取块个数
  218. *
  219. * Return:
  220. * > 0 成功读取到的字节数。
  221. * other 错误码。
  222. *
  223. *****************************************************************/
  224. int ql_nvm_fread(const char *config_file_name, void *buffer, size_t size, size_t num);
  225. /*****************************************************************
  226. * Function: ql_cust_nvm_fwrite
  227. *
  228. * Description:
  229. * 写入客户配置文件。
  230. *
  231. * Parameters:
  232. * buffer [in] 要写入的数据,不大于1KB
  233. * size [in] 要写入块大小
  234. * num [in] 要写入块个数
  235. *
  236. * Return:
  237. * > 0 成功写入的字节数。
  238. * other 错误码。
  239. *
  240. *****************************************************************/
  241. int ql_cust_nvm_fwrite(void *buffer, size_t size, size_t num);
  242. /*****************************************************************
  243. * Function: ql_cust_nvm_fread
  244. *
  245. * Description:
  246. * 读取客户配置文件
  247. *
  248. * Parameters:
  249. * buffer [out] 读取到的数据,不大于1KB
  250. * size [in] 要读取块大小
  251. * num [in] 要读取块个数
  252. *
  253. * Return:
  254. * > 0 成功读取到的字节数
  255. * other 错误码
  256. *
  257. *****************************************************************/
  258. int ql_cust_nvm_fread(void *buffer, size_t size, size_t num);
  259. /*****************************************************************
  260. * Function: ql_fac_cust_nvitem_fread
  261. *
  262. * Description:
  263. * 读取工厂分区的客户配置文件,与at+qfaccustnvm指令搭配使用
  264. *
  265. * Parameters:
  266. * nvitem_id [in] 配置数据编号,范围[0-(QL_MAX_FAC_NVITEM_COUNT-1)]
  267. * buffer [out] 读取到的数据,不大于2000B
  268. * size [in] 要读取块大小
  269. * num [in] 要读取块个数,size*num不大于2000B
  270. *
  271. * Return:
  272. * > 0 成功读取到的字节数
  273. * other 错误码
  274. *
  275. *****************************************************************/
  276. int ql_fac_cust_nvm_fread(uint8_t nvitem_id, void *buffer, size_t size, size_t num);
  277. #ifdef CONFIG_QUEC_PROJECT_FEATURE_VSIM_ADAPT_STD
  278. /*****************************************************************
  279. * Function: ql_fac_vsim_nvm_fwrite
  280. *
  281. * Description:
  282. * VSIM配置文件写入工厂分区, 仅用于VSIM应用备份还原, 只能产线使用, 不能擦写
  283. *
  284. * Parameters:
  285. * buffer [in] 写入的数据,不大于16 * 1024B
  286. * size [in] 要读取块大小
  287. * num [in] 要读取块个数,size*num不大于16 * 1024B
  288. *
  289. * Return:
  290. * > 0 成功写入的字节数。
  291. * other 错误码
  292. *
  293. *****************************************************************/
  294. int ql_fac_vsim_nvm_fwrite(void *buffer, size_t size, size_t num);
  295. /*****************************************************************
  296. * Function: ql_fac_vsim_nvm_fread
  297. *
  298. * Description:
  299. * 读取工厂分区的VSIM配置文件, 仅用于VSIM应用备份还原, 只能产线使用, 不能擦写
  300. *
  301. * Parameters:
  302. * buffer [out] 读取到的数据,不大于16 * 1024B
  303. * size [in] 要读取块大小
  304. * num [in] 要读取块个数,size*num不大于16 * 1024B
  305. *
  306. * Return:
  307. * > 0 成功读取到的字节数
  308. * other 错误码
  309. *
  310. *****************************************************************/
  311. int ql_fac_vsim_nvm_fread(void *buffer, size_t size, size_t num);
  312. #endif
  313. /*****************************************************************
  314. * Function: ql_sfs_setkey
  315. *
  316. * Description:
  317. * 设置SFS的秘钥key。
  318. *
  319. * Parameters:
  320. * key [in] 要设置的秘钥
  321. * len [in] 要设置的秘钥长度
  322. *
  323. * Return:
  324. * QL_FILE_OK 成功。
  325. * other 错误码。
  326. *
  327. *****************************************************************/
  328. int ql_sfs_setkey(void *key, uint8_t len);
  329. /*****************************************************************
  330. * Function: ql_fseek
  331. *
  332. * Description:
  333. * 重定位文件位置指针。
  334. *
  335. * Parameters:
  336. * fd [in] 文件ID
  337. * offset [in] 偏移量
  338. * origin [in] 偏移起始位置
  339. *
  340. * Return:
  341. * >= 0 文件位置指针当前位置相对于文件首的偏移字节数。
  342. * other 错误码。
  343. *
  344. *****************************************************************/
  345. int ql_fseek(QFILE fd, long offset, int origin);
  346. /*****************************************************************
  347. * Function: ql_ftell
  348. *
  349. * Description:
  350. * 获取文件位置指针当前位置相对于文件首的偏移字节数。
  351. *
  352. * Parameters:
  353. * fd [in] 文件ID
  354. *
  355. * Return:
  356. * >= 0 文件位置指针当前位置相对于文件首的偏移字节数。
  357. * other 错误码。
  358. *
  359. *****************************************************************/
  360. int ql_ftell(QFILE fd);
  361. /*****************************************************************
  362. * Function: ql_fstat
  363. *
  364. * Description:
  365. * 获取文件状态。
  366. *
  367. * Parameters:
  368. * fd [in] 文件ID
  369. * st [out] 文件状态
  370. *
  371. * Return:
  372. * QL_FILE_OK 成功。
  373. * other 错误码。
  374. *
  375. *****************************************************************/
  376. int ql_fstat(QFILE fd, struct stat *st);
  377. /*****************************************************************
  378. * Function: ql_stat
  379. *
  380. * Description:
  381. * 获取文件状态。
  382. *
  383. * Parameters:
  384. * file_name [in] 文件名
  385. * st [out] 文件状态
  386. *
  387. * Return:
  388. * QL_FILE_OK 成功。
  389. * other 错误码。
  390. *
  391. *****************************************************************/
  392. int ql_stat(const char *file_name, struct stat *st);
  393. /*****************************************************************
  394. * Function: ql_fsize
  395. *
  396. * Description:
  397. * 获取文件大小。
  398. *
  399. * Parameters:
  400. * fd [in] 文件ID
  401. *
  402. * Return:
  403. * >= 0 文件大小。
  404. * other 错误码。
  405. *
  406. *****************************************************************/
  407. int ql_fsize(int fd);
  408. /*****************************************************************
  409. * Function: ql_file_exist
  410. *
  411. * Description:
  412. * 判断文件是否存在。
  413. *
  414. * Parameters:
  415. * file_name [in] 文件名
  416. *
  417. * Return:
  418. * QL_FILE_OK 文件存在。
  419. * other 错误码。
  420. *
  421. *****************************************************************/
  422. int ql_file_exist(const char *file_name);
  423. /*****************************************************************
  424. * Function: ql_frewind
  425. *
  426. * Description:
  427. * 将文件位置指针移动到文件开始。
  428. *
  429. * Parameters:
  430. * fd [in] 文件ID
  431. *
  432. * Return:
  433. * QL_FILE_OK 成功。
  434. * other 错误码。
  435. *
  436. *****************************************************************/
  437. int ql_frewind(QFILE fd);
  438. /*****************************************************************
  439. * Function: ql_ftruncate
  440. *
  441. * Description:
  442. * 更改文件大小。
  443. *
  444. * Parameters:
  445. * fd [in] 文件ID
  446. * length [in] 指定的大小
  447. *
  448. * Return:
  449. * QL_FILE_OK 成功。
  450. * other 错误码。
  451. *
  452. *****************************************************************/
  453. int ql_ftruncate(QFILE fd, uint length);
  454. /*****************************************************************
  455. * Function: ql_mkdir
  456. *
  457. * Description:
  458. * 创建目录。
  459. *
  460. * Parameters:
  461. * path [in] 路径
  462. * mode [in] 模式
  463. *
  464. * Return:
  465. * QL_FILE_OK 成功。
  466. * other 错误码。
  467. *
  468. *****************************************************************/
  469. int ql_mkdir(const char *path, uint mode);
  470. /*****************************************************************
  471. * Function: ql_opendir
  472. *
  473. * Description:
  474. * 打开目录句柄。
  475. *
  476. * Parameters:
  477. * path [in] 路径
  478. *
  479. * Return:
  480. * NULL 失败。
  481. * other 目录句柄。
  482. *
  483. *****************************************************************/
  484. QDIR *ql_opendir(const char *path);
  485. /*****************************************************************
  486. * Function: ql_closedir
  487. *
  488. * Description:
  489. * 关闭目录句柄。
  490. *
  491. * Parameters:
  492. * pdir [in] 目录句柄
  493. *
  494. * Return:
  495. * QL_FILE_OK 成功。
  496. * other 错误码。
  497. *
  498. *****************************************************************/
  499. int ql_closedir(QDIR *pdir);
  500. /*****************************************************************
  501. * Function: ql_readdir
  502. *
  503. * Description:
  504. * 读取目录。
  505. *
  506. * Parameters:
  507. * pdir [in] 目录句柄
  508. *
  509. * Return:
  510. * NULL 失败。
  511. * other 目录信息。
  512. *
  513. *****************************************************************/
  514. qdirent * ql_readdir(QDIR *pdir);
  515. /*****************************************************************
  516. * Function: ql_telldir
  517. *
  518. * Description:
  519. * 获取目录流的当前位置。
  520. *
  521. * Parameters:
  522. * pdir [in] 目录句柄
  523. *
  524. * Return:
  525. * >= 0 目录流的当前位置。
  526. * other 错误码。
  527. *
  528. *****************************************************************/
  529. int ql_telldir(QDIR *pdir);
  530. /*****************************************************************
  531. * Function: ql_seekdir
  532. *
  533. * Description:
  534. * 设置目录流读取位置。
  535. *
  536. * Parameters:
  537. * pdir [in] 目录句柄
  538. * offset [in] 距离目录文件开头的偏移量
  539. *
  540. * Return:
  541. * >= 0 距离目录文件开头的偏移量。
  542. * other 错误码。
  543. *
  544. *****************************************************************/
  545. int ql_seekdir(QDIR *pdir, int offset);
  546. /*****************************************************************
  547. * Function: ql_rewinddir
  548. *
  549. * Description:
  550. * 设置目录流目前的读取位置为原来开头的读取位置。
  551. *
  552. * Parameters:
  553. * pdir [in] 目录句柄
  554. *
  555. * Return:
  556. * QL_FILE_OK 成功。
  557. * other 错误码。
  558. *
  559. *****************************************************************/
  560. int ql_rewinddir(QDIR *pdir);
  561. /*****************************************************************
  562. * Function: ql_rmdir
  563. *
  564. * Description:
  565. * 删除目录。
  566. *
  567. * Parameters:
  568. * path [in] 目录路径
  569. *
  570. * Return:
  571. * QL_FILE_OK 成功。
  572. * other 错误码。
  573. *
  574. *****************************************************************/
  575. int ql_rmdir(const char *path);
  576. /*****************************************************************
  577. * Function: ql_rmdir_ex
  578. *
  579. * Description:
  580. * 删除目录,并删除目录下的子目录和文件。
  581. * 谨慎操作,不要删除根目录。
  582. *
  583. * Parameters:
  584. * path [in] 目录路径
  585. *
  586. * Return:
  587. * QL_FILE_OK 成功。
  588. * other 错误码。
  589. *
  590. *****************************************************************/
  591. int ql_rmdir_ex(char *path);
  592. /*****************************************************************
  593. * Function: ql_rename
  594. *
  595. * Description:
  596. * 重命名文件。
  597. *
  598. * Parameters:
  599. * oldpath [in] 原文件名
  600. * newpath [in] 新文件名
  601. *
  602. * Return:
  603. * QL_FILE_OK 成功。
  604. * other 错误码。
  605. *
  606. *****************************************************************/
  607. int ql_rename(const char *oldpath, const char *newpath);
  608. /*****************************************************************
  609. * Function: ql_fs_free_size
  610. *
  611. * Description:
  612. * 查询空闲空间。
  613. *
  614. * Parameters:
  615. * path [in] (文件)路径
  616. *
  617. * Return:
  618. * >= 0 空闲空间大小。
  619. * other 错误码。
  620. *
  621. *****************************************************************/
  622. int64 ql_fs_free_size(const char *path);
  623. /*****************************************************************
  624. * Function: ql_fs_total_size
  625. *
  626. * Description:
  627. * 查询路径分区总空间。
  628. *
  629. * Parameters:
  630. * path [in] (文件)路径
  631. *
  632. * Return:
  633. * >= 0 空闲空间大小。
  634. * other 错误码。
  635. *
  636. *****************************************************************/
  637. int64 ql_fs_total_size(const char *path);
  638. /*****************************************************************
  639. * Function: ql_fs_free_size_by_fd
  640. *
  641. * Description:
  642. * 查询空闲空间。
  643. *
  644. * Parameters:
  645. * fd [in] 文件ID
  646. *
  647. * Return:
  648. * >= 0 空闲空间大小。
  649. * other 错误码。
  650. *
  651. *****************************************************************/
  652. int64 ql_fs_free_size_by_fd(int fd);
  653. /*****************************************************************
  654. * Function: ql_fputc
  655. *
  656. * Description:
  657. * 将字符chr写到文件的当前写指针的位置。当正确写入一个字符或一个
  658. 字节的数据后,文件内部写指针会自动后移一个字节的位置
  659. *
  660. * Parameters:
  661. * fd [in] 文件ID
  662. * chr [in] 带写入的字符
  663. *
  664. * Return:
  665. * >= 0 写入字符的ASCII值。
  666. * -1 读取失败。
  667. *
  668. *****************************************************************/
  669. int ql_fputc(int chr, int fd);
  670. /*****************************************************************
  671. * Function: ql_fputs
  672. *
  673. * Description:
  674. * 将字符串chr写到文件的当前写指针的位置。当正确写入一个字符或一个
  675. 字节的数据后,文件内部写指针会自动后移一个字节的位置
  676. *
  677. * Parameters:
  678. * fd [in] 文件ID
  679. * chr [in] 带写入的字符串
  680. *
  681. * Return:
  682. * >= 0 成功写入的字节数
  683. * other 错误码。
  684. *
  685. *****************************************************************/
  686. int ql_fputs(const char * chr, int fd);
  687. /*****************************************************************
  688. * Function: ql_fgetc
  689. *
  690. * Description:
  691. * 从文件中读取一个字符。读取一个字节后,光标位置后移一个字节
  692. *
  693. * Parameters:
  694. * fd [in] 文件ID
  695. *
  696. * Return:
  697. * >= 0 所读取字符的ASCII值。
  698. * -1 读取失败。
  699. *
  700. *****************************************************************/
  701. int ql_fgetc(int fd);
  702. /*****************************************************************
  703. * Function: ql_fgets
  704. *
  705. * Description:
  706. * 从文件中读取字符串。读取后,光标位置后移一个字节
  707. *
  708. * Parameters:
  709. * str [out] 读到的字符串
  710. * n [in] 读取长度
  711. * fd [in] 文件ID
  712. * Return:
  713. * str 所读到的字符串
  714. * other NULL。
  715. *
  716. *****************************************************************/
  717. char *ql_fgets(char *str, int n, int fd);
  718. /*****************************************************************
  719. * Function: ql_ferror
  720. *
  721. * Description:
  722. * 判断当前fd是否有效
  723. *
  724. * Parameters:
  725. * fd [in] 文件ID
  726. *
  727. * Return:
  728. * = 0 fd有效
  729. * other 错误码。
  730. *
  731. *****************************************************************/
  732. int ql_ferror(int fd);
  733. /*****************************************************************
  734. * Function: ql_fsync
  735. *
  736. * Description:
  737. * 同步内存中已修改的文件数据到储存设备
  738. *
  739. * Parameters:
  740. * fd [in] 文件ID
  741. *
  742. * Return:
  743. * = 0 同步成功
  744. * other 错误码。
  745. *
  746. *****************************************************************/
  747. int ql_fsync(int fd);
  748. /*****************************************************************
  749. * Function: ql_fscanf
  750. *
  751. * Description:
  752. * 从文件流读取格式化输入(长度限制1024)
  753. *
  754. * Parameters:
  755. * fd [in] 文件ID
  756. * format [in] 格式化字符串
  757. * Return:
  758. * >0 成功(格式化参数个数)
  759. * -1 失败。
  760. *
  761. *****************************************************************/
  762. int ql_fscanf(int fd, const char *format, ...);
  763. /*****************************************************************
  764. * Function: ql_fprintf
  765. *
  766. * Description:
  767. * 根据格式将字符串写入文件(长度限制2048)
  768. *
  769. * Parameters:
  770. * fd [in] 文件ID
  771. * format [in] 格式化字符串
  772. * Return:
  773. * Real write size.
  774. *
  775. *****************************************************************/
  776. int ql_fprintf(int fd, const char *format, ...);
  777. #ifdef __cplusplus
  778. } /*"C" */
  779. #endif
  780. #endif