Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
rt-thread
提交
50512e8a
R
rt-thread
项目概览
BaiXuePrincess
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
50512e8a
编写于
4月 13, 2020
作者:
B
Bernard Xiong
提交者:
GitHub
4月 13, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #3526 from majianjia/master
Export file examples to MSH
上级
5b300113
20146636
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
203 addition
and
82 deletion
+203
-82
examples/file/listdir.c
examples/file/listdir.c
+38
-10
examples/file/readspeed.c
examples/file/readspeed.c
+31
-8
examples/file/readwrite.c
examples/file/readwrite.c
+91
-46
examples/file/seekdir.c
examples/file/seekdir.c
+9
-10
examples/file/writespeed.c
examples/file/writespeed.c
+34
-8
未找到文件。
examples/file/listdir.c
浏览文件 @
50512e8a
/*
* File : listdir.c
* This file is part of RT-TestCase in RT-Thread RTOS
* COPYRIGHT (C) 2010, RT-Thread Development Team
* Copyright (c) 2006-2020, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2010-02-10 Bernard first version
* 2020-04-12 Jianjia Ma add msh cmd
*/
#include <rtthread.h>
#include <dfs_posix.h>
static
char
fullpath
[
256
];
void
list_dir
(
const
char
*
path
)
{
char
*
fullpath
;
DIR
*
dir
;
dir
=
opendir
(
path
);
...
...
@@ -25,6 +22,13 @@ void list_dir(const char* path)
struct
dirent
*
dirent
;
struct
stat
s
;
fullpath
=
rt_malloc
(
256
);
if
(
fullpath
==
RT_NULL
)
{
rt_kprintf
(
"no memory
\n
"
);
return
;
}
do
{
dirent
=
readdir
(
dir
);
...
...
@@ -35,7 +39,7 @@ void list_dir(const char* path)
rt_sprintf
(
fullpath
,
"%s/%s"
,
path
,
dirent
->
d_name
);
stat
(
fullpath
,
&
s
);
if
(
s
.
st_mode
&
DFS_
S_IFDIR
)
if
(
s
.
st_mode
&
S_IFDIR
)
{
rt_kprintf
(
"%s
\t\t
<DIR>
\n
"
,
dirent
->
d_name
);
}
...
...
@@ -47,10 +51,34 @@ void list_dir(const char* path)
closedir
(
dir
);
}
else
rt_kprintf
(
"open %s directory failed
\n
"
,
path
);
else
{
rt_kprintf
(
"open %s directory failed
\n
"
,
path
);
}
rt_free
(
fullpath
);
}
#ifdef RT_USING_FINSH
#include <finsh.h>
FINSH_FUNCTION_EXPORT
(
list_dir
,
list
directory
);
#endif
#ifdef FINSH_USING_MSH
static
void
cmd_list_dir
(
int
argc
,
char
*
argv
[])
{
char
*
filename
;
if
(
argc
==
2
)
{
filename
=
argv
[
1
];
}
else
{
rt_kprintf
(
"Usage: list_dir [file_path]
\n
"
);
return
;
}
list_dir
(
filename
);
}
FINSH_FUNCTION_EXPORT_ALIAS
(
cmd_list_dir
,
__cmd_list_dir
,
list
directory
);
#endif
/* FINSH_USING_MSH */
#endif
/* RT_USING_FINSH */
examples/file/readspeed.c
浏览文件 @
50512e8a
/*
* File : readspeed.c
* This file is part of RT-TestCase in RT-Thread RTOS
* COPYRIGHT (C) 2010, RT-Thread Development Team
* Copyright (c) 2006-2020, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2010-02-10 Bernard first version
* 2020-04-12 Jianjia Ma add msh cmd
*/
#include <rtthread.h>
...
...
@@ -34,7 +31,6 @@ void readspeed(const char* filename, int block_size)
{
rt_kprintf
(
"no memory
\n
"
);
close
(
fd
);
return
;
}
...
...
@@ -61,4 +57,31 @@ void readspeed(const char* filename, int block_size)
#ifdef RT_USING_FINSH
#include <finsh.h>
FINSH_FUNCTION_EXPORT
(
readspeed
,
perform
file
read
test
);
#endif
#ifdef FINSH_USING_MSH
static
void
cmd_readspeed
(
int
argc
,
char
*
argv
[])
{
char
*
filename
;
int
block_size
;
if
(
argc
==
3
)
{
filename
=
argv
[
1
];
block_size
=
atoi
(
argv
[
2
]);
}
else
if
(
argc
==
2
)
{
filename
=
argv
[
1
];
block_size
=
512
;
}
else
{
rt_kprintf
(
"Usage:
\n
readspeed [file_path] [block_size]
\n
"
);
rt_kprintf
(
"readspeed [file_path] with default block size 512
\n
"
);
return
;
}
readspeed
(
filename
,
block_size
);
}
FINSH_FUNCTION_EXPORT_ALIAS
(
cmd_readspeed
,
__cmd_readspeed
,
test
file
system
read
speed
);
#endif
/* FINSH_USING_MSH */
#endif
/* RT_USING_FINSH */
examples/file/readwrite.c
浏览文件 @
50512e8a
/*
*
代码清单:文件读写例子
*
Copyright (c) 2006-2020, RT-Thread Development Team
*
* 这个例子演示了如何读写一个文件,特别是写的时候应该如何操作。
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2010-02-10 Bernard first version
* 2020-04-12 Jianjia Ma add msh cmd
*/
#include <rtthread.h>
#include <dfs_posix.h>
/* 当需要使用文件操作时,需要包含这个头文件 */
#define TEST_FN "/test.dat"
#include <dfs_posix.h>
/* 测试用的数据和缓冲 */
static
char
test_data
[
120
],
buffer
[
120
];
#define TEST_DATA_LEN 120
/*
文件读写测试
*/
/*
file read write test
*/
void
readwrite
(
const
char
*
filename
)
{
int
fd
;
int
index
,
length
;
char
*
test_data
;
char
*
buffer
;
int
block_size
=
TEST_DATA_LEN
;
/*
只写 & 创建 打开
*/
fd
=
open
(
TEST_FN
,
O_WRONLY
|
O_CREAT
|
O_TRUNC
,
0
);
/*
open with write only & create
*/
fd
=
open
(
filename
,
O_WRONLY
|
O_CREAT
|
O_TRUNC
,
0
);
if
(
fd
<
0
)
{
rt_kprintf
(
"open file for write failed
\n
"
);
return
;
}
/* 准备写入数据 */
for
(
index
=
0
;
index
<
sizeof
(
test_data
);
index
++
)
test_data
=
rt_malloc
(
block_size
);
if
(
test_data
==
RT_NULL
)
{
rt_kprintf
(
"no memory
\n
"
);
close
(
fd
);
return
;
}
buffer
=
rt_malloc
(
block_size
);
if
(
buffer
==
RT_NULL
)
{
rt_kprintf
(
"no memory
\n
"
);
close
(
fd
);
rt_free
(
test_data
);
return
;
}
/* prepare some data */
for
(
index
=
0
;
index
<
block_size
;
index
++
)
{
test_data
[
index
]
=
index
+
27
;
}
/*
写入数据
*/
length
=
write
(
fd
,
test_data
,
sizeof
(
test_data
)
);
if
(
length
!=
sizeof
(
test_data
)
)
/*
write to file
*/
length
=
write
(
fd
,
test_data
,
block_size
);
if
(
length
!=
block_size
)
{
rt_kprintf
(
"write data failed
\n
"
);
close
(
fd
);
return
;
goto
__exit
;
}
/*
关闭文件
*/
/*
close file
*/
close
(
fd
);
/*
只写并在末尾添加打开
*/
fd
=
open
(
TEST_FN
,
O_WRONLY
|
O_CREAT
|
O_APPEND
,
0
);
/*
reopen the file with append to the end
*/
fd
=
open
(
filename
,
O_WRONLY
|
O_CREAT
|
O_APPEND
,
0
);
if
(
fd
<
0
)
{
rt_kprintf
(
"open file for append write failed
\n
"
);
return
;
goto
__exit
;
;
}
length
=
write
(
fd
,
test_data
,
sizeof
(
test_data
)
);
if
(
length
!=
sizeof
(
test_data
)
)
length
=
write
(
fd
,
test_data
,
block_size
);
if
(
length
!=
block_size
)
{
rt_kprintf
(
"append write data failed
\n
"
);
close
(
fd
);
return
;
goto
__exit
;
}
/*
关闭文件
*/
/*
close the file
*/
close
(
fd
);
/*
只读打开进行数据校验
*/
fd
=
open
(
TEST_FN
,
O_RDONLY
,
0
);
/*
open the file for data validation.
*/
fd
=
open
(
filename
,
O_RDONLY
,
0
);
if
(
fd
<
0
)
{
rt_kprintf
(
"check: open file for read failed
\n
"
);
return
;
goto
__exit
;
}
/*
读取数据(应该为第一次写入的数据
) */
length
=
read
(
fd
,
buffer
,
sizeof
(
buffer
)
);
if
(
length
!=
sizeof
(
buffer
)
)
/*
read the data (should be the data written by the first time
) */
length
=
read
(
fd
,
buffer
,
block_size
);
if
(
length
!=
block_size
)
{
rt_kprintf
(
"check: read file failed
\n
"
);
close
(
fd
);
return
;
goto
__exit
;
}
/*
检查数据是否正确
*/
for
(
index
=
0
;
index
<
sizeof
(
test_data
)
;
index
++
)
/*
validate
*/
for
(
index
=
0
;
index
<
block_size
;
index
++
)
{
if
(
test_data
[
index
]
!=
buffer
[
index
])
{
rt_kprintf
(
"check: check data failed at %d
\n
"
,
index
);
close
(
fd
);
return
;
goto
__exit
;
}
}
/*
读取数据(应该为第二次写入的数据
) */
length
=
read
(
fd
,
buffer
,
sizeof
(
buffer
)
);
if
(
length
!=
sizeof
(
buffer
)
)
/*
read the data (should be the second time data
) */
length
=
read
(
fd
,
buffer
,
block_size
);
if
(
length
!=
block_size
)
{
rt_kprintf
(
"check: read file failed
\n
"
);
close
(
fd
);
return
;
goto
__exit
;
}
/*
检查数据是否正确
*/
for
(
index
=
0
;
index
<
sizeof
(
test_data
)
;
index
++
)
/*
validate
*/
for
(
index
=
0
;
index
<
block_size
;
index
++
)
{
if
(
test_data
[
index
]
!=
buffer
[
index
])
{
rt_kprintf
(
"check: check data failed at %d
\n
"
,
index
);
close
(
fd
);
return
;
goto
__exit
;
}
}
/*
检查数据完毕,关闭文件
*/
/*
close the file
*/
close
(
fd
);
/* 打印结果 */
rt_kprintf
(
"read/write done.
\n
"
);
/* print result */
rt_kprintf
(
"read/write test successful!
\n
"
);
__exit:
rt_free
(
test_data
);
rt_free
(
buffer
);
}
#ifdef RT_USING_FINSH
#include <finsh.h>
/*
输出函数到finsh shell命令行中
*/
/*
export to finsh
*/
FINSH_FUNCTION_EXPORT
(
readwrite
,
perform
file
read
and
write
test
);
#endif
#ifdef FINSH_USING_MSH
static
void
cmd_readwrite
(
int
argc
,
char
*
argv
[])
{
char
*
filename
;
if
(
argc
==
2
)
{
filename
=
argv
[
1
];
}
else
{
rt_kprintf
(
"Usage: readwrite [file_path]
\n
"
);
return
;
}
readwrite
(
filename
);
}
FINSH_FUNCTION_EXPORT_ALIAS
(
cmd_readwrite
,
__cmd_readwrite
,
perform
file
read
and
write
test
);
#endif
/* FINSH_USING_MSH */
#endif
/* RT_USING_FINSH */
examples/file/seekdir.c
浏览文件 @
50512e8a
/*
* File : seekdir.c
* This file is part of RT-TestCase in RT-Thread RTOS
* COPYRIGHT (C) 2011, RT-Thread Development Team
* Copyright (c) 2006-2020, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2011-06-02 Bernard first version
* 2020-04-12 Jianjia Ma add msh cmd
*/
#include <dfs_posix.h>
...
...
@@ -17,7 +14,6 @@ void seekdir_test(void)
{
DIR
*
dirp
;
long
save3
=
0
;
long
cur
;
int
i
=
0
;
struct
dirent
*
dp
;
...
...
@@ -27,14 +23,14 @@ void seekdir_test(void)
{
rt_kprintf
(
"direntry: %s
\n
"
,
dp
->
d_name
);
/*
保存第三个目录项的目录指针
*/
/*
save the pointer of the third directory
*/
if
(
i
++
==
3
)
{
save3
=
telldir
(
dirp
);
}
}
/*
回到刚才保存的第三个目录项的目录指针
*/
/*
get back to the third directory
*/
seekdir
(
dirp
,
save3
);
rt_kprintf
(
"seek dientry to: %d
\n
"
,
save3
);
for
(
dp
=
readdir
(
dirp
);
dp
!=
RT_NULL
;
dp
=
readdir
(
dirp
))
...
...
@@ -42,9 +38,12 @@ void seekdir_test(void)
rt_kprintf
(
"direntry: %s
\n
"
,
dp
->
d_name
);
}
/*
关闭目录
*/
/*
close the directory
*/
closedir
(
dirp
);
}
#ifdef RT_USING_FINSH
#include <finsh.h>
FINSH_FUNCTION_EXPORT
(
seekdir_test
,
perform
directory
seek
test
);
MSH_CMD_EXPORT
(
seekdir_test
,
perform
directory
seek
test
);
#endif
/* RT_USING_FINSH */
examples/file/writespeed.c
浏览文件 @
50512e8a
/*
* File : writespeed.c
* This file is part of RT-TestCase in RT-Thread RTOS
* COPYRIGHT (C) 2010, RT-Thread Development Team
* Copyright (c) 2006-2020, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2010-02-10 Bernard first version
* 2020-04-12 Jianjia Ma add msh cmd
*/
#include <rtthread.h>
#include <dfs_posix.h>
...
...
@@ -32,7 +29,6 @@ void writespeed(const char* filename, int total_length, int block_size)
{
rt_kprintf
(
"no memory
\n
"
);
close
(
fd
);
return
;
}
...
...
@@ -69,4 +65,34 @@ void writespeed(const char* filename, int total_length, int block_size)
#ifdef RT_USING_FINSH
#include <finsh.h>
FINSH_FUNCTION_EXPORT
(
writespeed
,
perform
file
write
test
);
#endif
#ifdef FINSH_USING_MSH
static
void
cmd_writespeed
(
int
argc
,
char
*
argv
[])
{
char
*
filename
;
int
length
;
int
block_size
;
if
(
argc
==
4
)
{
filename
=
argv
[
1
];
length
=
atoi
(
argv
[
2
]);
block_size
=
atoi
(
argv
[
3
]);
}
else
if
(
argc
==
2
)
{
filename
=
argv
[
1
];
block_size
=
512
;
length
=
1024
*
1024
;
}
else
{
rt_kprintf
(
"Usage:
\n
writespeed [file_path] [length] [block_size]
\n
"
);
rt_kprintf
(
"writespeed [file_path] with default length 1MB and block size 512
\n
"
);
return
;
}
writespeed
(
filename
,
length
,
block_size
);
}
FINSH_FUNCTION_EXPORT_ALIAS
(
cmd_writespeed
,
__cmd_writespeed
,
test
file
system
write
speed
);
#endif
/* FINSH_USING_MSH */
#endif
/* RT_USING_FINSH */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录