📄 fs.c
字号:
/*------------------------------------------------------------------------
Module: fs.c
Author: livefall@163.com
Project:
State:
Creation Date: 2002-09-06
Description: ANSI文件操作接口
------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mytypes.h>
#include "../jffs/fileext.h"
#include "../jffs/ioctl.h"
#include "../jffs/fs.h"
#include "../jffs/fcntl.h"
#include "../jffs/jffs.h"
FILE *fopen( const char *filename, const char *mode )
{
int ret, flags;
flags = O_RDONLY;
if( mode[0] == 'w' ) flags = O_CREAT;
if( mode[0] == 'a' ) flags = O_CREAT | O_APPEND;
ret = mf_open(filename, flags, 0);
if(ret < 0) return NULL;
else return (FILE *)ret;
}
int fclose (FILE *stream)
{
int ret;
ret = mf_close((unsigned int)stream);
return ret;
}
int fread( void *buffer, size_t size, size_t count, FILE *stream )
{
int ret;
ret = mf_read((unsigned int)stream,(char *)buffer, count);
return ret;
}
int fwrite( const void *buffer, size_t size, size_t count, FILE *stream )
{
int ret;
ret = mf_write((unsigned int)stream,(char *)buffer, count);
return ret;
}
int fseek( FILE *stream, long offset, int origin )
{
int ret;
ret = mf_lseek((unsigned int)stream, offset, origin);
if(ret < 0) return -1;
else return 0;
}
int remove(const char *filename)
{
int ret;
ret = mf_unlink(filename);
return ret;
}
int stat(char * name, struct stat * pStat)
{
int fd, ret;
fd = mf_open(name, 0, 0);
if(fd < 0) return -1;
ret = mf_ioctl(fd, JFFS_GET_STATUS, pStat);
if(ret < 0) {
mf_close(fd);
return -1;
}
pStat->st_mtime = 0;
mf_close(fd);
return 0;
}
int feof (FILE *stream)
{
int ret;
ret = mf_eof((unsigned int)stream);
return ret;
}
struct dirent gDirent;
DIR *makedir(char *dirName)
{
int ret;
ret = mf_mkdir(dirName, 0);
if(ret <= 0) return NULL;
else return (DIR *)ret;
}
DIR *opendir(char * dirName)
{
int ret;
ret = mf_open(dirName, 0, 0);
memset(&gDirent, 0, sizeof(struct dirent));
if(ret <= 0) return NULL;
else return (DIR *)ret;
}
int closedir(DIR * pDir)
{
int ret;
ret = mf_close((unsigned int)pDir);
return ret;
}
struct dirent *readdir(DIR * pDir)
{
int ret;
errno = 0;
ret = mf_readdir((unsigned int)pDir, &gDirent, 0);
if(ret <= 0) return NULL;
else return &gDirent;
}
#define RENAME_BUF_LEN 4096
int rename(const char *oldname, const char *newname)
{
int fd1, fd2, len;
char *buf;
/*return mf_rename(oldname, newname, 0);*/
fd1 = mf_open(oldname, 0, 0);
if(fd1 < 0) return -1;
fd2 = mf_open(newname, 0, 0);
if(fd2 > 0) {
mf_close(fd1); mf_close(fd2);
return -1;
}
fd2 = mf_open(newname, O_CREAT, 0);
if(fd2 < 0) {
mf_close(fd1);
return -1;
}
buf = (char *)malloc(RENAME_BUF_LEN);
if(buf == NULL) {
mf_close(fd1); mf_close(fd2);
return -1;
}
do {
len = mf_read(fd1, buf, RENAME_BUF_LEN);
if(len < 0 || len > RENAME_BUF_LEN) break;
mf_write(fd2, buf, len);
}while(len == RENAME_BUF_LEN);
mf_close(fd1); mf_close(fd2);
free(buf);
return mf_unlink(oldname);
}
/*[031029-amine]-用cp代替rename,不用删除老文件*/
int cp(const char *oldname, const char *newname)
{
int fd1, fd2, len;
char *buf;
/*return mf_rename(oldname, newname, 0);*/
fd1 = mf_open(oldname, 0, 0);
if(fd1 < 0) return -1;
fd2 = mf_open(newname, 0, 0);
if(fd2 > 0) {
mf_close(fd1); mf_close(fd2);
return -1;
}
fd2 = mf_open(newname, O_CREAT, 0);
if(fd2 < 0) {
mf_close(fd1);
return -1;
}
buf = (char *)malloc(RENAME_BUF_LEN);
if(buf == NULL) {
mf_close(fd1); mf_close(fd2);
return -1;
}
do {
len = mf_read(fd1, buf, RENAME_BUF_LEN);
if(len < 0 || len > RENAME_BUF_LEN) break;
mf_write(fd2, buf, len);
}while(len == RENAME_BUF_LEN);
mf_close(fd1); mf_close(fd2);
free(buf);
return 0;
}
int fsstat(void)
{
int fd, ret;
fd = mf_open("/", 0, 0);
if(fd < 0) return -1;
ret = mf_ioctl(fd, JFFS_FS_INFO, NULL);
if(ret < 0) {
mf_close(fd);
return -1;
}
mf_close(fd);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -