如何在 Linux下实现一个文件系统简单实现代码

linux根文件系统制作和移植烧录到开发板的方法
根文件系统制作
目标:用busybox定制一个很小的文件系统。
1、 建立工作目录(这里建议统一用这个路径,否则在指定安装路径及copy库文件的路径都要改)
设定工作目录为/root/build_rootfs/, 下载busybox到该目录
2、 建立根目录,
该目录就是我们要移植到目标板上的目录,对于嵌入式的文件系统,根目录下必要的目录包括bin,dev,etc,usr,lib,sbin,proc
cd /root/build_rootfs
mkdir rootfs
mkdir bin dev etc usr lib sbin proc sys tmp
mkdir usr/bin usr/sbin usr/lib
/bin bin是Binary的缩写。这个目录存放着最经常使用的命令。
/sbin s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
dev是Device(设备)的缩写。该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
/etc这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/usr 我们要用到的很多应用程序和文件几乎都存放在usr目录下
& /usr/bin存放着许多应用程序;
/usr/sbin存放root超级用户使用的管理程序;
/usr/lib存放一些常用的动态链接共享库和静态档案库;
/lib这个目录里存放着系统最基本的动态链接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/proc这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
/proc 是系统运行时进程和内核的信息存在这里,它属于伪文件系统,存在于内存中。
/tmp 用于用户程序运行时产生的临时文件。
/sys 内核所支持的sysfs文件系统。Sysfs把系统上的设备和总线组织成一个分级的文件,以被用户空间存取。
3、 交叉编译busybox
busybox的源码可以从下载,这里我们下载一个1.5.0版本的源码。
我们在配置busybox的时候是基于默认配置之上来配置的;先make
defconfig就是把busybox配置成默认,然后再make menuconfig来配置busybox。
说明:我们在配置一个源代码包之前,可以先阅读源码包目录下的README和INSTALL文件以及Makefile的注释部分,也可以到网站以获取帮助。
的第二个问题2
有介绍怎么去配置。
(1)、在/root/build_rootfs解压
tar -xvf busybox-1.13.3.tgz&
tar xvzf mkyaffs2image.tgz& -C /
cd busybox-1.13.3
(2)、添加交叉工具链
export PATH=/usr/local/arm/4.3.2/bin:$PATH
(3)、配置编译
&& make defconfig
make menuconfig
配置时,我们基于默认配置,再配置它为静态编译,安装时不要/usr路径,把Miscellaneous Utilities
下的“taskset”选项去掉,不然会出错。
如下(按Y就会选上,N不选):
如果您正在构建一个具有特殊需求的嵌入式设备,那就可以手工使用 menuconfig make
目标来配置 BusyBox 的内容。如果您熟悉 Linux 内核的编译过程,就会注意到 menuconfig 与配置 Linux
内核的内容所使用的目标相同。实际上,它们都采用了相同的基于 ncurses 的应用程序。
使用手工配置,我们可以指定在最终的 BusyBox 映像中包含的命令。我们也可以对 BusyBox
环境进行配置,例如包括对 NSA(美国国家安全代理)的安全增强
Linux(SELinux),指定要使用的编译器(用来在嵌入式环境中进行交叉编译)以及 BusyBox 应该静态编译还是动态编译。图
1 给出了 menuconfig 的主界面。在这里我们应该可以看到可以为 BusyBox
配置的不同类型的应用程序(applet)。
Busybox setting
&&&&&&&&&&
-&builds options
&&&&&&&&&&&&&&&&
-&[*] build busybox as a static binary(a)
&&&&&&&&&&
-&installitation options
&&&&&&&&&&&&&&&&
-&[*] don’t use /usr (b)
Miscellaneous Utilities ―& (c)
&&&&&&&&&&
[& ] taskset
其他选项都是一些linux基本命令选项,自己需要哪些命令就编译进去,一般用默认的就可以了。保存退出。
(a)这个选项是一定要选择的,这样才能把busybox编译成静态链接的可执行文件,运行时才独立于其他函数库.否则必需要其他库文件才能运行,在单一个linux内核不能使他正常工作。
(b)这个选项也一定要选,否则make
install后,busybox将安装在原系统的/usr下,这将覆盖掉系统原有的命令.选择这个选项后,make
install后会在busybox目录下生成一个叫_install的目录,里面有busybox和指向他的链接.
Taskset命令能够为即将执行的程式或已有进程指定affinity属性,让该程式或进程运行在指定的CPU上。下面是几个例子:
taskset ?c 1 nohup perl pi.pl &&
& ---指定在1号CPU上执行指定的perl程式
taskset ?c 1 ?P 10284&
&---将10284号进程限定在1号CPU上执行
4、编译安装
make ARCH=arm CROSS_COMPILE=arm-linux-
CONFIG_PREFIX=/root/build_rootfs/rootfs all install
(此时bin(195个 290M) sbin(58个 86.4M
---windows下看的结果)已安装了文件,其实是busybox的可执行文件和指向它的链接。不同的链接名完成不同的功能,命令行调用作为一个参数传给busybox,即可完成相应的功能,即于
BusyBox 中包含的每个工具来说,都会创建一个符号链接,这样就可以使用这些符号链接来调用 BusyBox 了。BusyBox
然后可以通过 argv[0] 来调用内部工具)
ARCH指定平台
CROSS_COMPILE指定交叉编译
CONFIG_PRRFIX指定安装的路径
5、 copy C库
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
echo "Set seaech library in /etc/profile"
export LD_LIBRARY_PATH=/lib&&
echo "Set user path in /etc/profile"
PATH=/bin:/sbin:/usr/bin&&
#命令的路径
#export PS1=[root@mini2440\
\\W]\\$&& 当有自动补齐功能时使用这个
export PS1=[root@mini2440]\#&&
//命令行提示符
(2)创建vi inittab文件,内容如下每一条目用来定义一个子进程,并确定它的启动方法(该文件的):
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh&&&&&&&&&&&&&&&&
(注意:“-”要加上。)
::ctrlaltdel:/bin/umount -a -r
&(3)创建/etc/init.d/rcS 文件,mkdir
init.d& ,cd init.d,& vi
rcS内容如下(rcS是个可执行的脚步文件,是系统启动之后先执行的命令,所以要确保它可执行 chmod 777 rcS):
#! /bin/sh
/bin/mount
&//“mount -a”命令后将挂载proc,tmpfs
等包含在该文件中的所有的文件系统。
&&//下面三行是配置增加热插拔支持
/bin/mount -t tmpfs mdev
/dev&& ///设置dev 目录被用作一个 tmpfs
文件系统的挂载点,该文件系统是由 mdev 填充的。&
这样在/dev目录下就可以看到内核已经挂载的驱动的节点。
/bin/echo /sbin/mdev &
/proc/sys/kernel/hotplug& //2)设置内核的hotplug handler
为 mdev, 即当设备热插拔时,由 mdev 接收来自内核的消息并作出相应的回应, 比如挂载U盘。
当有热插拔事件产生时, 内核就会调用位于/sbin目录的 mdev。 这时 mdev通过环境变量中的 ACTION 和
DEVPATH, (这两个变量是系统自带的)来确定此次热插拔事件的动作以及影响了/sys
中的那个目录。接着会看看这个目录中是否有“dev”的属性文件,如果有就利用这些信息为 这个设备在/dev 下创建设备节点文件。
//mdev 主要是实现对移动设备的动态挂载 在/dev
目录下建立必要的设备节点&& mdev扫描 /sys/class
和/sys/block中所有的类设备
目录,如果在目录中含有名为“dev”的文件,且文件中包含的是设备号,则 mdev
就利用这些信息为这个设备在/dev下创建设备节点文件。
(4)在/etc/目录下添加文件vi fstab,内容如下(该文件定义了文件系统的静态信息):
proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
则已经挂载的设备可以通过命令查询#lsmod
所挂载的设备的设备号可查询#cat /proc/devices
&& 其中/proc
是系统运行时进程和内核的信息存在这里,它属于伪文件系统,存在于内存中。
&& /tmp 用于用户程序运行时产生的临时文件。
内核所支持的sysfs文件系统。Sysfs把系统上的设备和总线组织成一个分级的文件,以被用户空间存取。
7、构建/dev目录:
cd /root/build_rootfs/rootfs/
mknod dev/console c 5 1&&
//建立控制台和终端的节点
mknod dev/null& c 1 3
mknod dev/tty1 c 4 1
mknod dev/tty2 c 4 2
mknod dev/tty3 c 4 3
mknod dev/tty4 c 4 4
8、添加一个用户程序
进入工作目录
cd /root/build_rootfs/
编辑源文件
vi hello.c
#include "stdio.h"
int main(void)
printf("*********hello**********\n");
arm-linux-gcc hello.c -o hello
复制到目标板的根目录
mv hello /root/build_rootfs/rootfs/usr/bin
9、 制作yaffs2映像
找到mkcramfs工具,把它复制到“/root/build_rootfs”目录下。
cd /root/build_rootfs/
mkyaffs2image-128M& rootfs rootfs.yaffs2
chmod 777 rootfs.yaffs2
cp rootfs.yaffs2 /tftpboot
rootfs.yaffs2就是我们要烧写到目标板的映像文件
10、烧写rootfs.yaffs2到3分区,启动开发板,运行hello程序。
rootfs.yaffs2
nand erase 00000
下载完提示下载了多大就多大,是16进制)
11、确认内核的信息能挂载到文件系统的proc等目录
/proc/devices& 看已经挂载的设备和设备号是否在该文件中
/dev&& 看是否有很多设备节点
12、解决命令不能使用的问题
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。博客访问: 85579
博文数量: 48
博客积分: 2050
博客等级: 大尉
技术积分: 475
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
如何实现一个文件系统
本章目的是分析在Linux系统中如何实现新的文件系统。在介绍文件系统具体实现前先介绍文件系统的概念和作用,抽象出了文件系统概念模型。熟悉文件系统的内涵后,我们再近一步讨论Linux系统中和文件系统的特殊风格和具体文件系统在Linux中组成结构,逐步为读者勾画出Linux中文件系统工作的全景图。最后在事例部分,我们将以romfs文件系统作实例分析实现文件系统的普遍步骤。
什么是文件系统
别混淆“文件系统”
首先要谈的概念就是什么是文件系统,它的作用到底是什么。
文件系统的概念虽然许多人都认为是再清晰不过的了,但其实我们往往在谈论中或多或少地夸大或片缩小了它的实际概念(至少我时常混淆),或者说,有时借用了其它概念,有时说的又不够全面。
比如在操作系统中,文件系统这个术语往往既被用来描述磁盘中的物理布局,比如有时我们说磁盘中的“文件系统”是EXT2或说把磁盘格式化成FAT32格式的“文件系统”等——这时所说的“文件系统”是指磁盘数据的物理布局格式;另外,文件系统也被用来描述内核中的逻辑文件结构,比如有时说的“文件系统”的接口或内核支持Ext2等“文件系统”——这时所说的文件系统都是内存中的数据组织结构而并非磁盘物理布局(后面我们将称呼它为逻辑文件系统);还有些时候说“文件系统”负责管理用户读写文件——这时所说的“文件系统”往往描述操作系统中的“文件管理系统”,也就是文件子系统。
虽然上面我们列举了混用文件系统的概念的几种情形,但是却也不能说上述说法就是错误的,因为文件系统概念本身就囊括众多概念,几乎可以说在操作系统中自内存管理、系统调度到I/O系统、设备驱动等各个部分都和文件系统联系密切,有些部分和文件系统甚至未必能明确划分——所以不能只知道文件系统是系统中数据的存储结构,一定要全面认识文件系统在操作系统中的角色,才能具备自己开发新文件系统的能力。
文件系统的体系结构
为了澄清文件系统的概念,必须先来看看文件系统在操作系统中处于何种角色,分析文件系统概念的内含外延。我们先抛开Linux文件系统的实例,而来看看操作系统中文件系统的普遍体系结构,从而增强对文件系统的理论认识。
下面以软件组成的结构图的方式描述文件系统所涉及的内容。
阅读(250) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。在Linux下创建分区和文件系统的方法详解
get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是在Linux下创建分区和文件系统的方法详解,一起来学习了解下吧!
top1:在Linux下创建分区和文件系统的方法详解
&  在 Linux 中创建分区或新的文件系统通常意味着一件事:安装 Gnome Parted 分区编辑器(GParted)。对于大多数 Linux
用户而言,这是唯一的办法。不过,你是否考虑过在终端创建这些分区和文件系统?当然可以!以下就是方法!  使用 CFdisk 创建一个基本的 Linux 分区  以下是如何在命令行中创建一个基本的 Linux
分区的正确方案。要做的第一件事就是先打开你的终端。若你已打开,你需要找到你想要创建分区的磁盘。这可以使用一个简单的命令来找到。  复制代码  代码如下:  lsblk  当你运行了 lsblk,你应该会看到当前系统上每个磁盘的详细列表。看看这个列表,然后找出你想要使用的磁盘。在本文中,我将使用 sdb
来进行演示。  在终端输入这个命令。它会显示一个功能强大的基于终端的分区编辑程序。  代码如下:  sudo cfdisk /dev/sdb  注意: 使用在 lsblk 命令输出的你想要使用的磁盘来替换 sdb。  当输入此命令后,你将进入分区编辑器中,然后访问你想改变的磁盘。  由于磁盘分区的不同,这取决于用户的需求,这部分的指南将在 如何建立一个分离的 Linux home/root 分区布局。  首先,需要创建根分区。这需要根据磁盘的字节数来进行分割。我测试的磁盘是 32 GB。  在 CFdisk 中使用上的方向键选择需要分配的空间。你找到后,请使用箭头键选择 [ NEW ],然后按 Enter 键。  该程序会要求你输入分区大小。一旦你指定好大小后,按 Enter 键。这将被称为根分区(或 /dev/sdb1)。  接下来该创建 home 分区(/dev/sdb2)了。你需要在 CFdisk 中再选择一些空闲分区。使用箭头选择 [ NEW ] 选项,然后按
Enter 键。输入你的 home 分区的大小,然后按 Enter 键来创建它。  最后,需要创建交换分区。像前两次一样,先找一些空闲分区,并使用箭头选择 [ NEW ] 选项。之后,算下你 Linux 想使用多大的交换分区。  注意: 交换分区通常和计算机的差不多大。  现在,创建了交换分区,该指定其类型。使用上下箭头来选择它。之后,使用左右箭头选择 [ TYPE ] 。找到 Linux swap 选项,然后按
Enter 键。  所有分区创建后。然后就是将其写入到磁盘。使用右箭头键,选择 [ WRITE ] 选项,然后按 Enter
键。这将直接将新创建的分布写入到磁盘中。  使用 mkfs 创建文件系统  有时候,你并不需要一个整个重新分区,你只想要创建一个文件系统而已。你可以在终端直接使用 mkfs 命令来实现。  首先,找出你要使用的磁盘。在终端输入 lsblk 找出来。它会打印出列表,之后只要找到你想创建文件系统的分区或。  在这个例子中,我将使用第二个硬盘的 /dev/sdb1 作为第一个分区。可以对 /dev/sdb 使用 mkfs(这将会使用整个分区)。  要在一个特定的分区上创建新文件系统,只需输入  复制代码  代码如下:  sudo mkfs.ext4 /dev/sdb1  在终端。应当指出的是,mkfs.ext4 可以换成任何你想要使用的的文件系统。  PS:使用 GParted 调整分区  在 Linux 中调整分区最简单的方法是使用 GUI GParted 程序。尽管您可以从您的常规 Linux 安装下运行 GParted
,但是它拒绝在任何当前挂载的分区上进行操作。因此,您不能调整根目录(/)或者其他对功能来说至关重要的分区。在这我将介绍如何使用一个 Linux
紧急引导磁盘实现您的更改。该磁盘被引导之后,您可以运行 GParted
,就像您从一个常规系统运行那样,使用即指即点操作来告知软件您想进行什么操作。先把软件安装上吧。直接在终端下键入gparted,得到提示输入sudo
apt-get install gparted,依样画葫芦,从网络下载完成。  1.运行一个紧急磁盘  现在有许多 Linux 紧急磁盘(emergency discs),比如 PartedMagic 和 SystemRescueCd(见
参考资料)。您也可以使用您的 Linux 安装介质,许多版本都包括一个救援模式(rescue mode),支持访问 GParted
或者类似的实用工具。为了说明问题,我将介绍 PartedMagic 4.11 的使用;然而,笼统地说其他使用工具也是类似的。但是,需要以不同的方式启动
GParted。  多数紧急磁盘是以 x86(32 位)的形式出现的,但是这些磁盘在 x86-64(64 位)计算机中也能很好地工作,甚至系统运行 64 位版本的
Linux 也可以。文件系统数据结构不受(CPU)架构的影响。如果您要在其他的机器上运行,除了标准个人(PC),比如
Macintosh,您需要检查您的紧急磁盘能否同您的硬件一起工作。  一般情况下,您必须引导一个紧急磁盘,就像您引导一个 Linux
安装磁盘那样。在一些系统上,插入磁盘然后重新引导计算机执行该任务。在有些系统上,您必须按一个功能键来选择引导设备,或者调整一个基本输入/输出系统(BIOS)选项来从引导,而不从硬盘引导。关于如何执行该操作的具体细节是根据系统而定的,您需要查阅手册页获取详细信息。  当您引导 PartedMagic 时,出现一个引导菜单。选择 Default settings (ns from RAM)
引导到标准系统。系统引导时,您可以看到出现一个桌面,其中含有常用工具的图标,包括一个启动 GParted 的 Partition
Editor。双击这个图标开始调整您的分区大小。  2.告知 GParted 关于您的更改  要调整一个分区,右键单击它,然后从下拉菜单选择
Resize/Move。结果是出现如图所示的对话框。您可以使用图形滑块或者文本输入域调整分区大小和位置。  将其开始点向右移动为 /dev/sdb5 的扩展腾出空间。  您也要在调整 /dev/sdb5 大小之前将交换分区(/dev/sdb6)向右移动。另一种情况是,您可以删除和重新创建交换分区;然而,这可能需要修改
UUID 引用来交换 /etc/fstab 中的空间,当交换空间被移动后,您可以扩展 /dev/sdb5。  如果您想要从逻辑分区腾出空间给主分区,您必须显式地调整围绕逻辑分区的扩展分区,反之一样。您可以像调整其他任何分区那样做;然而您将发现点击其列表条目比起点击上述分区列表的图表中的条目更为容易。  GParted 不允许您调整正在使用的分区。比如在分区的条目旁边有一个锁形图标。您可以右键单击分区并选择 Unmount
卸载它。注意如果扩展分区其中包含的任何一个分区(包括交换空间)正在使用,那么它是以这种方式锁定的。  3.在 GParted 中实现您的更改  在您向 GParted 通知您的更改之后,您必须通过选择 Edit
Apply All Operations 菜单项或者单击 Apply
图标实现它。结果是出现一个进度对话框,概述程序正在执行的一切。如果您决定撤销操作,可以使用 GParted 的 undo
功能或者不应用您的更改直接从程序退出,那么您的磁盘将未有任何变化。  分区调整操作需要花费一定时间来完成,从一秒钟到几个小时不等,取决于改变的本质和移动数据的多少。无论在何种情况下您都不能中断正在运行的操作!如果这样做将会破坏文件系统,导致数据无法恢复。& 搜索“图老师”或者“tulaoshi_com”加关注,每天最新的美食、、、美妆、、手工DIY等教程让你一手全掌握。推荐关注!【扫描下图可直接关注】
点击查看更多与《》相关的文章>>
下面图老师小编要跟大家分享怎么在Linux系统中创建和使用XFS系统,简单的过程中其实暗藏玄机,还是要细心学习,喜欢还请记得收藏哦!
清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐介绍一下Linux操作系统下查找文件的方法,无聊中的都看过来。
Linux环境下的ReiserFS文件系统,Linux环境下的ReiserFS文件系统
人生本是一个不断学习的过程,在这个过程中,图老师就是你们的好帮手,下面分享的Linux系统CentOS 7搭建高可用集群的方法详解懂设计的网友们快点来了解吧!
岁数大了,QQ也不闪了,微信也不响了,电话也不来了,但是图老师依旧坚持为大家推荐最精彩的内容,下面为大家精心准备的删除vista系统NIFS分区文件的方法,希望大家看完后能赶快学习起来。
今天天气好晴朗处处好风光,好天气好开始,图老师又来和大家分享啦。下面给大家推荐在Linux系统上使用交换文件扩展swap空间的方法,希望大家看完后也有个好心情,快快行动吧!
热门搜索:
PS教程 打造电眼男
Excel教程 在excel里面设置密码的方法
PS后期处理
使用PS将美女图片提亮
巧用滤镜对美女皮肤进行磨皮 PS相片处理
如今很多人都想如何利用橡皮泥捏出可爱的小鸡,不要担心,今天我就来告诉你如何解决这件事情,接下来介绍的是如何利用橡皮泥捏出可爱的小鸡,如果你对这个内容很感兴趣的话,就和我一起来学习一下吧,希望这些能够帮助到你。
如今很多人都想知道怎样制作创意礼物,不要担心,今天我就来告诉你如何解决这件事情,接下来介绍的是怎样制作创意礼物,如果你对这个内容很感兴趣的话,就和我一起来学习一下吧,希望这些能够帮助到你。
如今很多人都节日应该送什么礼物给男友,不要担心,今天我就来告诉你如何解决这件事情,接下来介绍的是节日应该送什么礼物给男友如果你对这个内容很感兴趣的话,就和我一起来学习一下吧,希望这些能够帮助到你。
如今很多人都想知道怎样自制包包,不要担心,今天我就来告诉你如何解决这件事情,接下来介绍的是怎样自制包包,如果你对这个内容很感兴趣的话,就和我一起来学习一下吧,希望这些能够帮助到你。
王者荣耀是当下非常火热的一款网游,不管男女老少很多朋友都非常喜欢玩,要想在王者荣耀里面玩的尽兴就要学会掌握一定的王者荣耀技巧,这样更加能提升你的手法,那么王者荣耀技巧有哪些呢?
微信是我们日常生活中经常使用的一种通讯软件工具,我们可以有效的利用微信和我们的家人、朋友、同事进行沟通。但是很多人在使用微信的过程中经常不会不小心删除了聊天记录。那么,此时该如何恢复微信的聊天记录呢?
大家出门在外可能经常会遇到下雨又没带伞的情况,随着社会的发展,现今在广州一种共享雨伞的投入使用大大的便利了市民的生活。我们知道广州的地铁服务一向不错,早在2008年开始就推出了地铁便民雨伞的服务。那么,共享雨伞和地铁便民雨伞是一样的吗?有什么不同呢?
2017年最受欢迎的生活服务APP!!生活服务类App的出现为日常生活带来极大便利,我们可以通过手机客户端预约各种家政服务,足不出户就能够享受实惠、便捷的生活服务,那么接下来我为大家推荐一些生活中必备生活app。
由于现在抢红包大热起来,很多app都开始支持发红包抢红包了,因此也出现了微信抢红包神器,可以自动抢微信红包,肯定比认为手动操作快,有消息就会自动打开,然后打开红包。今天就给大家分享2017微信自动抢红包神器大全。
2017手机赚钱软件排行榜!!很多朋友都在苦恼每天的钱不够话,空闲时间不知道怎么打发,总想寻找一种简单的赚钱方式,我们的手机app就有很多,下面具体给大家介绍手机赚钱软件有哪些,总有一款你中意的。
经常玩微信的朋友都知道,微信小程序已经全面上线了,对于小程序的出现是否会引发App变革众说纷纭,但不可否认的是小程序能够带给用户及产商一定的便利,那么今天为大家汇总目前上线的一些实用小程序。
男女交往一直都是人们比较关注的一个问题,都说相爱容易,相处不易,交往过的朋友应该都能深刻的体会到,女生常常抱怨着让男生理解自己,但男生也希望多体谅一下他们。尤其不要老是问一些无法回答的问题来考验他们。
很多朋友都信风水一说,对于自己家里房屋客厅的装修也是有一定要求的,因为客厅的风水关系着整个家居的运势,更关系着主人的财运与健康,因而客厅里的风水禁忌是需要我们谨慎注意的,那么风水学中客厅风水禁忌有哪些呢?
春天已经来临了,夏天也不远了,新的一才刚刚开始,时尚爱美的美眉们最关注的就是春夏服装设计的流行趋势了,早早的把握住时尚趋势走在流行的最尖端,今天就给大家整理分享2017春夏女装设计流行趋势 ,你绝对不能错过的亮点。

我要回帖

更多关于 文件系统简单实现代码 的文章

 

随机推荐