⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fs.c

📁 JFFS的源代码
💻 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 + -