一、系统IO
1.write
       #include <unistd.h>

ssize_t write(int fd, const void *buf, size_t count);
参数:
    fd:文件描述符
    buf:从buf里面拿数据写出去
    count:你想要写入到fd里面去的字节数
返回值:
    成功:返回你实际写入的字节数
    失败:-1


总结:
char buf[1024] = "abcdefg";
ret = write(fd,buf,10);
printf("ret=%d\n",ret);    
当你的buffer里面只有7个字节,如果你想写入10个字节,实际返回值也是10;所以说count这个
参数的值,一定要按照你实际有效字节数来写;(注意它和read函数不一样)

2.lseek
       #include <sys/types.h>
       #include <unistd.h>

off_t lseek(int fd, off_t offset, int whence);
参数:
    fd:文件描述符
    offset:偏移量
    whence:基准坐标
           SEEK_SET 文件头
                      The offset is set to offset bytes.
           SEEK_CUR 当前位置
                      The offset is set to its current location plus offset bytes.
           SEEK_END 文件尾
                      The offset is set to the size of the file plus offset bytes.
返回值:
    成功:返回实际的偏移量(光标离文件头的的位置量)
    失败:-1


练习1:
自己创建一个文件3.txt,随便在里面输入小于1024个字节
,通过lseek函数来计算出文件里面的字节数    
printf("file size=%d\n",ret);

说明:
 通常使用lseek(fd,0,SEEK_END)这种写法来文件大小

3.open函数的拓展
       #include <sys/types.h>
       #include <sys/stat.h>
       #include <fcntl.h>

int open(const char *pathname, int flags);(常用)
       int open(const char *pathname, int flags, mode_t mode);
参数:
    pathname:文件路径名
    flags:标志量
    mode:权限(手动创建的时候给它一个权限)
返回值:
    成功:新的文件描述符
    失败:-1
说明:
    如果想要使用mode这个变量给你创建的文件一个权限,不要在共享目录里面去验证;
因为共享目录是属于windows环境,在windows环境下给权限会与linux有冲突
1)验证要在家目录里面验证
2) 你给的权限和你实际得到的权限是经过运算后的值(umask)
3) 权限的运算不是数值上面的加减,而是某一位权限上面的数值的加减

4.文件和目录的权限
1)什么是umask
它可以影响一个文件和目录的起始权限

2)如何查看umask的值
gec@ubuntu:~/bling$ umask
0002
0002 --->表示当前系统的umask值
0      ----->第一个0是无效值
002  ----->有效的umask值

3)文件起始权限 = 666 - umask
    -rw- rw- rw-   (666)
           -     ---  ---  -w-    (002)
--------------------------------
    -rw- rw- r--     (664)

4)目录的起始权限 = 777 - umask
    -rwx rwx rwx   (777)
           -     ---  ---   -w-    (002)
--------------------------------
    -rwx rwx r-x     (775)

5)修改umask的起始权限
gec@ubuntu:~/bling$ umask 0000  (临时修改umask值为000)
gec@ubuntu:~/bling$ umask
0000
gec@ubuntu:~/bling$ ls -l
total 32
drwxrwxr-x 2 gec gec 4096 Jul 21 00:27 01
drwxrwxrwx 2 gec gec 4096 Jul 21 01:29 04   //修改之后的目录的权限是777
-rw-rw-r-- 1 gec gec    0 Jul 21 01:20 1.c
-rw-rw-rw- 1 gec gec    0 Jul 21 01:29 4.c    //修改之后的文件的权限是666

二、读写问题对光标移动的思考(对同一个文件描述符操作)
先读,再读
先读,再写
先写,再写
先写,再读
上面4种情况,光标位置都会随着你读写而改变;除非你手动用lseek函数去干预它光标的位置。

=========================================
LCD屏幕的操作
=========================================
一、按照接口类型来分类LCD屏幕
1.RGB (并行信号) -----GEC6818
2.LVDS (差分信号)
3.MIPI(mipi信号)----手机

二、LCD
1.lcd的文件名
/dev/fb0   (framebuffer --- 帧缓冲)

2.lcd屏幕的大小分辨率(单位是像素点)
800*480(像素点)
说明:
      分辨率的大小和屏幕的尺寸大小,没有任何关系。

3.一个像素点等于多少个字节
一个像素点=4个字节
整个LCD屏幕的大小 = 800*480*4(字节)

4.一个像素点的组成部分(一个像素点的4个字节分别表示什么)
ARGB
A:  透明度 (按照理论上来说,如果我们给透明度一个值,颜色会有深浅之分,GEC6818没有变化)
R:  红色
G:绿色
B:蓝色

红色:0x00 ff 00 00
绿色:0x00 00 ff 00
蓝色:  0x00 00 00 ff
白色:0x00 ff  ff   ff
黑色:0x00 00 00 00

三、如何运用以上的知识点实现头顶一片绿
1.打开LCD
int fd;
fd = open("/dev/fb0",O_RDWR);
2.定义一个LCD的buffer
int buf[800*480] = {0};  //这种定义的方式就是给整个像素点赋值
3.往这一个LCD的buffer填值
for(y=0;y<480;y++)
{
    for(x=0;x<800;x++)
    {
        //当y=0 x=0,第0行第0个像素点
        //当y=1 x=1,第1行第1个像素点
        //当y=1 x=3,第1行第3个像素点
        buf[y*800+x] = green;
    }
}
4.将这一个buffer刷到LCD上去
write(fd,buf,800*480*4);

练习2:
德国国旗、法国国旗、比利时国旗等条状国旗

四、交叉编译
[root@GEC6818 /IOT]#mkdir bling
[root@GEC6818 /IOT]#cd bling/
[root@GEC6818 /IOT/bling]#rx lcd_arm
CC
开始 xmodem 传输。  按 Ctrl+C 取消。
  100%       6 KB    6 KB/s 00:00:01       0 Errors

[root@GEC6818 /IOT/bling]#chmod 777 lcd_arm 
[root@GEC6818 /IOT/bling]#ls
lcd_arm
[root@GEC6818 /IOT/bling]#./lcd_arm

作业:

一、文件的拷贝

拷贝大文件(循环拷贝)

比如说你拷贝一个图片1.jpg把他拷贝成2.jpg

1、观察2.jpg图片是否能正常打开

2、两张图片的字节大小是否一模一样

//需要两个文件描述符

while(1)

{

read();

write();

//读取终止条件

break;

}

二、附加题

变成指令

答案:

int main(int argc,char *argv[])

{

int fd_src;

int fd_dst;

fd_src = open(argv[1],O_RDWR);

if(fd_src < 0)

{

perror("open 1.jpg fail!\n");

return -1;

}

fd_dst = open(argv[2],O_RDWR|O_CREAT);

if(fd_dst < 0)

{

perror("open 2.jpg.fail!\n");

return -1;

}

int i = 0;

while(1)

{

char buf[1024] = {0};

int ret_rd,ret_wr;

ret_rd = read(fd_src,buf,1024);

ret_wr = write(fd_dst,buf,ret_rd);

printf("ret_rd:%d  ret_wr:%d  count:%d\n",ret_rd,ret_wr,++i);

if(ret_rd == 0)//if(ret_rd < 1024)

break;

}

close(fd_src);

close(fd_dst);

return 0;

}

int fd1 = open(argv[1],O_RDWR,0664);int fd2 = open(argv[2],O_RDWR|O_CREAT,0664);int ret = lseek(fd1,0,SEEK_END);//查看原文件的大小printf("ret = %d\n",ret);char buf[ret];//内存缓冲lseek(fd1,0,SEEK_SET);//把光标移动回到最开始read(fd1,buf,ret);//读取数据write(fd2,buf,ret);//写入数据close(fd1);close(fd2);

文件IO(系统IO)相关推荐

  1. IO进程——系统IO与文件IO

    IO进程--系统IO与文件IO 在应用开发过程中会经常需要访问文件.Linux下读写文件的方式有两大类:标准IO和文件IO.本次就来讲一讲文件IO和标准IO,以及两者的区别. 一.文件IO 在Linu ...

  2. JAVASE基础模块三十四( 菜鸡版简单登录验证模块系统IO流文件写入)

    JAVASE基础模块三十四( 菜鸡版简单登录验证模块系统IO流文件写入) 开发流程:需求文档 接口文档 效果图 开发环境统一:JDK1.8 IDEA win10 GIT SSM SSH SpringB ...

  3. 服务器复制文件出现io错误,win7系统复制文件时发生IO错误的解决方法

    很多小伙伴都遇到过win7系统复制文件时发生IO错误的困惑吧,一些朋友看过网上零散的win7系统复制文件时发生IO错误的处理方法,并没有完完全全明白win7系统复制文件时发生IO错误是如何解决的,今天 ...

  4. JAVA mac系统io文件流_Java IO流基础1--IO的分类体系与文件流

    什么是IO流 Java中的IO 了解什么是IO流之前,要先知道什么是IO.IO,就是in和out(即输入和输出),指应用程序和外部设备之间的数据传递,常见的外部设备包括文件.管道.网络连接等. 流的概 ...

  5. 第十七篇,文件偏移量lseek函数,系统IO应用实例(LCD应用)和内存映射详细讲解。

    一.文件偏移量. 1.什么是文件偏移量? 文件偏移量就是文件光标当前的定位,默认打开一个文件时,文件的定位都是在文件的最开头. 文件读操作/写操作都会使得文件偏移量往后偏移. 2.怎么才能使得文件偏移 ...

  6. java中sum=a+aa+aaa_Java面向对象基础IO系统

    Java面向对象基础–IO系统 一.IO 输入:input 输出:output Java的IO主要包含三个部分 流式部分:IO的主题部分 非流式部分:主要包含一些辅助流式部分的类 文件读取部分的与安全 ...

  7. linux PCB数组,Linux中的系统IO函数

    一.整体大纲 二. 系统IO函数 1. 一些概念 文件描述符 PCB C库函的IO缓冲区 1) 文件描述符 int 类型 一个进程最多可打开多少文件 2) pcb 进程控制块 在其中有一个文件描述符表 ...

  8. 彻底明白Java语言中的IO系统

    ava的核心库java.io提供了全面的IO接口,包括:文件读写,标准设备输出等等.Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入.在具体使用中很多初学者对Ja ...

  9. Linux系统IO分析工具之iotop常用参数介绍

      Linux系统IO分析工具之iotop常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在一般运维工作中经常会遇到这么一个场景,服务器的IO负载很高(iostat中的 ...

最新文章

  1. 微软一站式示例代码浏览器 v5.1 更新
  2. SQL Server ALwayson 正在解析
  3. (0034) iOS 开发之UIView动画(过渡效果)
  4. 思科、华为、华三、Juniper路由协议优先级汇总
  5. mysql登录报错error1045,mysql创建登录报错ERROR1045(28000)
  6. PAT 1086 就不告诉你
  7. Ubuntu 10.04正式发布
  8. Android开发实践:Java层与Jni层的数组传递
  9. 国家建筑标准设计图集
  10. atitit .大数据的方法,技术.attilax总结 大数据包含哪些方面 v5 s09..docx 7. 三大核心技术:拿数据,处理转换,算数据 2 8. 大数据有5个部分。数据采集,数据存储,
  11. python小学生教程-python 小学生教程|怎么让一个小学生学会Python?
  12. -2. JavaScript Methods
  13. 【笔记】Robust High-Resolution Video Matting with Temporal Guidance
  14. lisp方格网法计算土方量_方格网法计算土方量教材及例题
  15. JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
  16. 【MFC学习笔记】常见问题解答
  17. 有一定基础的 C++ 学习者该如何学习 Windows 编程?
  18. jQuery操作数组、Ajax
  19. 【转载】通过 FUNCTION NET_DUE_DATE_GET 得到MIRO付款日期(DUE ON DATE)
  20. cloc JAVA文件_Mac下统计任意文件夹中代码行数的工具——cloc

热门文章

  1. 2022换工作面经--蓝湖
  2. STM32 USB相关知识扫盲
  3. bluestacks android 4.4,它是最流行的模拟器?BlueStacks安卓模拟器体验
  4. 《 V I M 教 程 》 —— 版本 1.5
  5. 英雄联盟手游测试服显示服务器尚未开启,英雄联盟手游进不去怎么办
  6. python3学习笔记之三——统计英文文章中出现次数最多的单词前三
  7. JS学习笔记——前端的webview是什么东西
  8. 建正教育:一级建造师证书技能提升补贴全国省份今日已更新!
  9. 保密协议无效认定_签署了竞业限制协议,离职后只能被逼转行吗?详细解析竞业限制...
  10. unity2018.3新的预制件流程学习笔记