linux文件IO操作之一:文件读写操作

2 篇文章 0 订阅
订阅专栏

一、文件I/O基本概念

关于文件IO,涉及以下基本概念:文件描述符&系统调用接口
下面以思维导图的形式梳理这几个知识点:
思维导图源文件在此: Linux_文件IO.xmind
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

二、demo举例

下面记录linux文件操作如下四个基本接口:

  • 备注:全文分为两个demo。demo1为接口的基本使用方法,供学习理解使用。demo2考虑了所有的错误场景处理,一般工程中会使用demo2 *
open()   /* 打开文件 */
read()   /* 读文件 */
write()  /* 写文件 */
close()  /* 关闭文件 */

2.1 demo1:四大接口基本用法

  • 注意:此demo仅仅是当做学习理解读写文件接口的基本操作来使用。
               一般情况下,由于读写文件时可能会出现各种错误,正常工程中需要考虑处理所有的错误,如果要全部读取文件,一直到文件末尾(EOF),此demo并不能适用于工程中,常见工程中的用法请移步之后的demo。
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main(void)
{
    int fd_src = 0;
    int fd_dest = 0;
    ssize_t len_src = 0;
    ssize_t len_dest = 0;
    char buf[1000];

    printf("start:\r\n");

    /* open file */
    fd_src = open("src.txt", O_RDONLY);
    if (fd_src == -1) {
        perror("Open src failed:");
        return -1;
    }
    fd_dest = open("dest.txt", O_RDWR | O_TRUNC | O_CREAT, 0664);
    if (fd_dest == -1) {
        perror("Open dest failed:");
        return -1;
    }

    /* read file to buff */
    memset(buf, 0, sizeof(buf));
    len_src = read(fd_src, (void *)buf, sizeof(buf));
    if (len_src == -1) {
        perror("Read failed:");
        return -1;
    }

    /* print buff */
    printf("%s\r\n", buf);

    /* write file */
    len_dest = write(fd_dest, (const char *)buf, strlen(buf));
    if (len_dest == -1) {
        perror("Write failed:");
        return -1;
    }
    memset(buf, 0, sizeof(buf));

    /* close file */
    close(fd_src);
    close(fd_dest);

    printf("end!\r\n");

    return 0;
}

2.2 demo2:四大接口在工程中常见用法

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>

int main(void)
{
    int fd_src = 0;
    int fd_dest = 0;
    int len;        /* 想要读取or写入的字节长度 */
    char buf[1000]; /* 缓冲区:保存读出的内容 */
    char *pbuf = buf;
    ssize_t ret;

    printf("start:\r\n");

    /* 打开文件 */
    fd_src = open("src.txt", O_RDONLY);
    if (fd_src == -1) {
        perror("Open src failed:");
        return -1;
    }
    fd_dest = open("dest.txt", O_RDWR | O_TRUNC | O_CREAT, 0664);
    if (fd_dest == -1) {
        perror("Open dest failed:");
        return -1;
    }

    /* 读文件(src.txt)
     * len:需要读取的字节长度
     * ret:读取到的字节长度
     */
    len = sizeof(buf);
    memset(buf, 0, sizeof(buf));
    while ((len != 0) && ((ret = read(fd_src, (void *)buf, len)) != 0)) {
        if (ret == -1) {
            if (errno == EINTR) {
                continue;
            }
            perror("read:");
            break;
        }

        len = len - ret;
        pbuf = pbuf + ret;
    }

    /* 写文件(dest.txt) */
    pbuf = buf;
    len = strlen(buf);
    while ((len != 0) && ((ret = write(fd_dest, buf, len)) != 0)) {
        if (ret == -1) {
            if (errno == EINTR) {
                continue;
            }
            perror("write:");
            break;
        }
        len = len - ret;
        pbuf = pbuf + ret;
    }

    /* 关闭文件 */
    close(fd_src);
    close(fd_dest);

    printf("end!\r\n");

    return 0;
}

2.2.1关于read(),主要是下面这一段代码:

    /* len_src:要读取的数据长度 
     * ret:读文件接口read()的返回值,表示读取到的数据长度
     */
    while ((len_src != 0) &&
        ((ret = read(fd_src, (void *)pbuf, len_src)) != 0)) {
        if (ret == -1) {
            if (errno == EINTR) {
                continue;
            }
            perror("read:");
            break;
        }

        len_src = len_src - ret;
        pbuf = pbuf + ret;
    }

释义:

  • (1)read函数表示:从文件描述符指向位置开始读取文件到buff中,返回值为读取的长度,如果返回-1表示读取失败,错误码在errno中保存,如果为0表示读取0个字节。
  • (2)如果要读取数据长度len_src为0,那直接跳过,不如不读
  • (2)从fd_src文件中读取数据到pbuf缓冲区中,需要读出len_src长度
  • (3)返回值ret如果为-1,读取失败则处理失败
  • (4)如果读取成功,判断【要读取的长度 - 已读取到的长度】是否为0,如果为0则读取结束(因为有时候可能会读取失败或者读取中断,所以减去读取到的长度跟需要读的长度进行判断)
  • (5)碰到EOF也表示读取文件到末尾了,需要结束了。

2.2.2 关于write(),主要是下面这段代码

    /* 写文件(dest.txt) */
    /* 将buf中的字符串写入到fd_dest中 */
    pbuf = buf;
    len = strlen(buf);
    while ((len != 0) && ((ret = write(fd_dest, buf, len)) != 0)) {
        if (ret == -1) {
            if (errno == EINTR) {
                continue;
            }
            perror("write:");
            break;
        }
        len = len - ret;
        pbuf = pbuf + ret;
    }

释义:

  • (1)write函数表示:从文件描述符fd引用文件的当前位置开始,将buf中的最多count个字节写入文件中。写入错误返回-1,成功时返回写入的字节数并更新文件位置。
  • (2)要写入的长度不为零,就开始写入,写入之后返回值ret不为0表示写入成功或失败,进循环,循环中进行-1判错。
  • (3)写入ret个字节以后,将想要写入的长度减去已写入的长度ret,并且缓冲区指针偏移ret为已经写入的长度。
  • (4)再次循环时,如果len为0了表示写够了,跳出循环。
Linux-kernel-file-IO.rar_Linux IO_linux 文件读写_linux读写文件_文件io_简单内核
09-24
linux 2.6内核下读写文件的简单实例。
【嵌入式软件工程师面经】Linux文件IO.pdf
最新发布
04-27
IO操作,即输入/输出操作,是指在计算机系统中数据在内存和外围设备之间传输的行为。在操作系统的上下文中,IO通常关联于文件系统的操作,以及与外设如硬盘、显示器、网络接口和键盘鼠标等的交互。 文件IO(File I/O) 读取(Read): 从文件系统中的文件读取数据到内存中。 写入(Write): 将数据从内存写入到文件系统的文件中。 打开(Open): 打开文件以便读取或写入数据。 关闭(Close): 完成文件操作后关闭文件,释放资源。 定位(Seek): 移动文件内的指针到特定位置,用于读写操作。 同步(Sync): 确保内存中的数据与存储设备中的数据同步。 设备IO(Device I/O) 直接IO: 与具体的硬件设备进行数据传输,如磁盘、GPU等。 缓冲IO: 数据首先被读取到一个内存缓冲区,然后再从缓冲区移动到最终的目的地。 同步与异步IO: 同步IO要求操作完成后程序才继续运行,而异步IO允许程序在操作还在进行时继续其他任务。
文件IO操作
weixin_61094678的博客
04-24 886
是指存储在硬盘上的数据,以文件为单位进行组织。常见的就是普通的文件(如文本文件,视频,图片,可执行文件等)文件夹是一种特殊的文件,也叫做目录操作系统要负责软硬件资源的管理,而操作系统往往会把这些都统一的抽象为“文件”来经行管理。例如网卡:就是把网卡这个设备抽象成一个文件,创建出一个特殊的文件,表示网卡。从网卡接受到的数据,就读进这个文件。往网卡里发送数据,就写入这个文件。键盘:从键盘读取数据,也是把键盘抽象成一个文件(stdin),读设个文件就能读到用户输入的按键内容了。
C语言模拟实现Linux文件系统
09-12
C语言模拟实现Linux文件系统 1、在内存中开辟一块空间来模拟文件系统的运行,不读写硬盘。 2、面向单用户、单任务,不考虑并发,不考虑文件属主、组等概念。 3、程序开始后,初始化并接收用户输入。若输入”enter”,则重新建立文件系统, 读取上次的退出状态,以上次目录为当前目录; 若输入”q”则退出程序。 用户输入”exit”后,保存当前状态,退出系统 ,等待用户输入。
Linux开发——文件IO open、read、write、close函数的使用及实现文件复制
嵌入式Linux充电站
04-18 3058
文件读取 文件复制 #include <stdio.h> #include <fcntl.h> #include <unistd.h> #define bufsize 1024 int main(){ //打开文件 int src = open("./test",O_RDONLY);//以只读形式打开test文件,返回一个文件描述符 i...
嵌入式学习之linux系统编程---4 文件IOread函数
qq_42822743的博客
03-16 4030
1、read函数的函数原型 #include <unistd.h> ssize_t read(int fd,void *buf,size_t count) 在函数原型中,ssize_t 指的是返回值;fd是要读取的文件文件描述符;* buf是万能指针,一个任意类型的指针,议案是传进去一个地址;count是要读取的字节个数。同样地,在ubuntu界面输入:man 2 read 可以查看read函数的相关信息。该函数的作用是从文件描述符fd所指定的文件中读取“count”字节的大小到“buf”所
Linux系统编程-读写IO
好好学习,天天向上
04-19 612
一:系统调用 3~4G系统的空间,这部分是由操作系统来管理的,如果我们需要操作这块的空间,只能通过系统提供的函数才能进行访问,系统提供了大概200多个系统函数,我们把系统函数的调用称之为系统调用。 二:系统函数 我们在C代码中经常使用printf() 函数,但是最终的输出是显示在屏幕上的,那么怎么就能够在屏幕上进行打印输出结果呢?其实,printf() 函数最终是通过调用系统函数 write(), 然后调用显示驱动程序,最终显示在界面上的。write() 函数就是系统函数,我们可以通过 man 2 w
Linux文件I/O修改程序的配置文件文件编程总结四)
qq_41899773的博客
03-31 471
实现功能:将配置文件里面的字符串改为逆序;(例如在TEXT.config 里面写入“abcdefg”,当运行完程序之后TEXT.config 里面变为“gfedcba”) 目的:进一步锻炼linux文件I/O编程基本函数的使用:open 、read、write、close、lseek; LinuxC下的字符串strstr函数的进一步巩固使用; 函数的使用功能:https://blog.c...
Linux文件IO操作
兰天禄的博客
04-21 2097
文件操作1、系统调用概述2、系统调用 和 库函数的区别(重要!!!)3、文件描述符(重要!!!)案例:读取文件数据4、文件的打开读写关闭4.1、打开文件open4.1.1、flags宏的介绍(打开方式)4.1.2、mode的介绍(权限)4.2、关闭文件close案例:4.3、文件的写操作write4.4、read读取文件数据案例:读文件数据案例:实现cp命令: cp src_file ds...
linuxIO函数(仅限于读写)的总结
萧海的博客
11-28 428
1、linux读写底层原理 以最底层的系统调用read和write为例,来讲解。 read从原理上理解就是把对应文件描述符在内核缓存中的值复制到进程空间中 write则是把一系列值从进程空间中复制到对应的文件描述符的内核缓冲区中 有两个概念需要明确: 内核缓冲区:这是系统内核自己设置的缓冲区,不管使用什么IO函数,都是存在的,read和write也有内核缓冲区 进程缓冲区:这个缓冲区不一定存在,比如直接使用read函数或者write,那么就没有进程缓冲区。而这个缓冲区一般是人为设定的,比如CSAPP第十章中
基于C语言实现Linux下的文件读写追踪器(动态注入)【100012732】
06-12
款适用于 Linux 系统的动态追踪文件读写信息的共享库。原理是通过重写与 IO 相关的函数,在程序运行前优先加载本动态链接库,实现记录文件读写信息。请不要全局载入本动态链接库!
基于Linux的动态注入技术实现的文件读写追踪器.zip
07-06
款适用于 Linux 系统的动态追踪文件读写信息的共享库。原理是通过重写与 IO 相关的函数,在程序运行前优先加载本动态链接库,实现记录文件读写信息。请不要全局载入本动态链接库! 详细介绍参考:...
手把手教Linux驱动8-Linux IO模型
一口Linux的专栏
09-28 881
更多Linux驱动知识,请关注 一口Linux 对于一个应用程序即一个操作系统进程来说,它既有内核空间(与其他进程共享),也有用户空间(进程私有),它们都是处于虚拟地址空间中。用户进程是无法访问内核空间的,它只能访问用户空间,通过用户空间去内核空间复制数据,然后进行处理。 什么是IOIO模型中,先讨论下什么是IO? 在计算机系统中I/O就是输入(Input)和输出(Output)的意思,针对不同的操作对象,可以划分为磁盘I/O模型,网络I/O模型,内存映射I/O, Di...
基于linux文件IO
qq_64407987的博客
08-21 170
IO就是input(输入)和output(输出),文件IO就是对数据进行文件操作,以达到某种目的。比如将从键盘输入的数据存在某一文本文件中,或者把某一文本文件中的数据读出来显示在屏幕上。
linux 文件io和标准io的一些实现细节,linux学习之IO操作read,标准IO总结
weixin_32864847的博客
05-14 277
首先 read,当读一个文件的时候,read返回的是实际读取的字节数,当读取文件结束后,下次read返回0,当read一个socket时,返回也是实际读取的字节数,当socket上没有数据时,如此时是阻塞的,则一直阻塞在这,若不是阻塞的则返回-1,当socket断开时,返回0;所以0标示,连接结束linux学习之IO操作,标准IO总结IO文件操作时最常用的也最基本的内容。linux文件系统是由两层...
linux系统编程之文件与I/O(二):文件的读取写入
Meditation
05-12 3820
一、read系统调用 一旦有了与一个打开文件描述相关连的文件描述符,只要该文件是用O_RDONLY或O_RDWR标志打开的,就可以用read()系统调用从该文件中读取字节  函数原型: ssize_t read(int fd, void *buf, size_t count); 参数: fd :想要读的文件文件描述符 buf : 指向内存块的指针,从文件中读取来的字节放到这个内存
Linux下的文件IO操作
lzx的博客
04-03 117
IO操作openclosewritereadlseek阻塞与非阻塞 open 函数架构: int open(const char *pathname, int flags); 返回值:返回最小的可用文件描述符 close 函数架构: // fd:文件描述符 int close(int fd); 返回值:关闭成功返回0,失败返回-1 write 函数架构 /* fd:文件描述符 buf:缓冲区 count:缓冲区大小 */ ssize_t write(int fd, void *buf, size_t c
linux i o读取文件,Linux文件I/O操作详解
weixin_30120049的博客
04-29 839
1. 文件I/O操作类型文件Linux系统中是一个广泛的概念,Linux将所有的硬件设备当作文件来处理。文件的I/O分为两种类型,第一种类型是非缓冲式文件操作,主要是由系统调用提供,另一种是缓冲式I/O操作,主要是由C语言的标准输入输出库函数提供。2. 非缓冲式文件I/O操作非缓冲式文件操作对于小规模文件的读写,或者是实时设备,执行非缓冲式文件操作,应用程序能够立即得到数据。非缓冲式文件操作的函...
Linux 文件IO
09-07
Linux文件IO操作是指在Linux系统中对文件的读取和写入操作。在Linux中,文件被视为字节流,并且可以通过文件描述符来进行访问。 文件IO操作主要涉及以下几个函数: 1. open():用于打开文件,它返回一个文件描述...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 【示波器的基本使用】以及【示波器按键面板上各个按键含义的介绍】 72320
  • STM32操作访问flash,包括写入数据到flash和从flash读取数据 67992
  • 频谱分析仪的基本使用 44072
  • STM32内存大小与地址的对应关系以及计算方法 33535
  • SecureCRT导出配置 & 导入配置 29079

分类专栏

  • Shell脚本 1篇
  • Nand Flash 2篇
  • Qualcomm
  • U-Boot
  • U-Boot命令 1篇
  • Linux命令 8篇
  • Linux驱动实践 2篇
  • linux驱动学习 16篇
  • Linux应用 2篇
  • 软件工具、虚拟机等 11篇
  • Vim 12篇
  • Makefile 4篇
  • 正则表达式 3篇
  • 硬件电路 3篇
  • 仪器设备工具使用方法 2篇
  • QNX 11篇
  • STM32 21篇
  • Git 3篇
  • c语言 12篇
  • DSP 1篇
  • Windows设置与办公 12篇
  • Markdown与CSDN 3篇

最新评论

  • 原码、反码、补码

    做而论道_CS: 一开始,计算机专家就定义了:符号位! 由此,原码反码,就都出现了:正负两个零。 而实际上,数字,只有:  正数、负数、零。 注意:  零,只有一个! 上过小学的,都知道这事。 而计算机专家,竟然弄出来两个零! 然后,他再怎么弄,显然都是错误的。 这些计算机专家,上过小学吗? 值得怀疑。

  • 原码、反码、补码

    做而论道_CS: 如果从:符号位原码反码 ...,  开始学习 “补码”,就误入歧途了。   一个谬论接一个谬论,根本就无法自圆其说。 因为,计算机中,根本就没有:  符号位原码反码补码。 你看过《卖拐》吧?  要论忽悠,老赵,远远比不上这些计算机老师!  没影的事,他们能说的,和真的一样。

  • 原码、反码、补码

    做而论道_CS: 另外,由补码换算到十进制数,也极其简单。 你只需记住:【补码首位的权,是负数】。 一般的八位二进制数,各个位的权是:   128、64、32、16、8、4、2、1; 如果是八位的补码,各个位的权则是:  -128、64、32、16、8、4、2、1。   例如,有一个补码:1110 0001, 它代表的十进制是:-128 + 64 + 32 + 1= -31。 再看,另一个补码:0110 0001, 它代表的十进制是:0 + 64 + 32 + 1 = +97。 仅仅使用【进制转换】,不就完事了! ---------------------- 那么,所谓的:  机器数真值符号位原码反补码正数三码与正数相同  负数取反加一符号位不变符号位也参加运算模同余 ... 这一大堆乱七八糟的概念,不都是垃圾嘛! 进位,是小学二年级的知识点吧?  舍弃进位,很难理解吗?  老外竟然能弄出那么大一堆概念!  老外的数学水平,由此可见一斑。 谁要是跟老外学算术,立刻、马上,直接就掉沟里去了! 我们的计算机老师,也不懂数学,只知道跟风。 一天一天的,在大学里面,兜着圈子讲小学的知识。 真是毁人不倦坑人不浅! 这些老师,捡个鞋拔子就当成玉如意了。 天天蒙骗学生,自己赚取名声和丰厚的讲课费。 顺便再抓几个学生挂科,抖一下威风! 现在知道我们缺芯片用的原因了吧!

  • 原码、反码、补码

    做而论道_CS: 计算机的字长,是固定的。 八位机,它只会做:  八位 + 八位 = 一个进位、八位的和。 八位二进制数是:0000 0000 ~ 1111 1111。 也就是十进制数:0 ~ 255。 如果有进位,就是:2^8 = 256。 在两位十进制运算中,舍弃的进位,是:一百。 那么:  加 99,再减 100,当然就是 -1 了。  加 98,再减 100,必定就是 -2。  。。。 八位二进制的进位,是:2^8 = 256。  加 255 (1111 1111),再减 256,也就是 -1 ! 同理:  +254 (1111 1110),就是 -2。  +253 (1111 1101),就是 -3。  。。。  +128 (1000 0000),就是 -128。 以上这些正数,就是计算机专家 “发明” 的补码! 你如果上过中学,你一定能推出关系式:  负数的补码 = 256 + 负数。 一般化:  负数的补码 = 2^n + 负数。  n,是补码的位数。 例:求-31 的补码是什么? 解:256-31 = 225 = 1110 0001 (二进制)。 这不就求出来了吗? 哪里还用什么 “原码取反加一”! ------------- 求正数的补码,公式也是雷同的:  正数的补码 = 256 + 该正数。 要知道,加上 256,就是出现一个进位。 进位必须舍弃,所以,256 就不用加了。 于是,公式可以简化为:  正数的补码 = 该正数。 在此处,这就证明了:  零和正数的补码,就该数字本身。 举例,就不用了吧。 计算机专家也是说:  正数的补码,就是该正数。 但是,他们并没有给出证明。 为什么不加以证明呢? 因为这些专家:  弄不懂什么是进位,  更不懂什么是舍弃进位!

  • 原码、反码、补码

    做而论道_CS: 计算机,使用的是二进制数。 作为数字,二进制、十进制,都是一样的。 数,它们就是数,并不是什么“原码反码补码”。 如果用数字,代表 “非数字”,才能叫做 “码”。 如:学号、门牌车牌电话性别英文汉字声音颜色 ... 在码长八位时,各码的范围如下:  原码:-127 ~ +127;  反码:-127 ~ +127;  补码:-128 ~ +127。 看到了吧? -128 只有补码,没有原码和反码。 没有原码,拿什么取反? 没有反码,拿什么加一? 取反加一,不可用! -128 的补码,又是怎么来的? 是特殊规定的吗?  不是的! 所有的补码,都是算出来的。 但是,并不是用 “原码取反加一” 算的。 ------------------- 所谓的 “补码”,并非二进制才有。  在任何进制中,都是存在的。  补码,也并非是计算机专家的发明。 你看十进制数,两位的:0 ~ 99。 可以有:  27 + 99 = (一百) 26  27 - 1 = 26 只要你忽略进位,仍旧保持两位数,  这两种算法的功能,就是相同的! 即,舍弃了进位:  正数,就能当负数使用!  加法,也就可以实现减法运算! 在计算机中舍弃进位,会怎样?  可以省掉减法器,简化硬件!  只用一个加法器,就可横行天下! ================== 你如果明白什么是【忽略进位】:  你就能懂得 “补码” 的来源与意义。 ==================

大家在看

  • 【MySQL】探索 MySQL 中的 CASE WHEN 表达式
  • 【Python】使用 Pandas 统计每行数据中的空值
  • SpringMVC:@RequestMapping注解 774
  • C++运算符重载 1211
  • C++高级编程之——函数重载、内联、缺省参数、隐式转换 871

最新文章

  • 【Shell脚本】读取大量DDR寄存器的值
  • How to make nand flash factory bin image?
  • 转载:上传网易云盘音频,不会自动改名
2024年1篇
2023年2篇
2022年3篇
2021年12篇
2020年60篇
2019年27篇
2018年9篇
2017年22篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司宝鸡网站推广工具常德网站优化推广多少钱遂宁优秀网站设计多少钱海口关键词按天扣费公司株洲seo排名价格潜江网页设计哪家好阿坝企业网站建设多少钱三明网站优化软件报价醴陵企业网站改版多少钱巢湖seo网站优化报价大连网站制作多少钱迪庆网页制作推荐西乡SEO按天扣费多少钱玉溪百度网站优化排名报价铜仁关键词按天扣费哪家好焦作seo网站优化多少钱茂名seo价格坪地如何制作网站鹤壁网站优化排名价格延安阿里店铺托管哪家好怀化建设网站公司龙华百姓网标王推广公司泰安网站推广哪家好揭阳关键词按天收费福田seo排名推荐临汾seo网站推广多少钱宿州百度标王推荐巴中推广网站价格舟山网站排名优化推荐坂田百度网站优化公司歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化