Linux应用开发————常用系统IO函数

Linux应用开发

1.硬件访问---一切皆文件--调用系统IO相关函数操作设备文件从而控制硬件的响应

2.多任务处理(进程、线程)

3.网络编程(基于UDP,TCP协议,利用Socket网络通讯)

4.数据库编程(MySQL数据库)

硬件设备访问

原则: 应用程序是无法直接访问硬件设备的,需要通过内核(OS)提供的系统调用服务来达到访问硬件设备目的,

问题: 那么如何才能使用系统调用服务?

答案:通过系统IO函数(系统IO: 是Linux内核提供的一套函数接口。)

基本概念

1.  什么是文件?

文件是存储在外存储器上的数据集合。

2.  Linux系统中文件的标识?

文件描述符;

3. 文件描述符是什么,其本质又是什么?

Linux系统为每个打开(借助于系统IO)的文件会进行一个编号,这个编号就称为文件描述符;

描述符的本质为: 非负整数

每一个应用程序启动后,系统都会默认打开3个文件描述符:

0    标准输入设备

1    标准输出设备

2    标准错误设备

文件访问步骤:

        1. 打开文件,(获取文件描述符)  

        2. 文件操作  (读取,写入,获取文件状态信息)

        3. 关闭文件  (释放文件描述符)

照片传输

大多数的操作系统都是小端存储:低数据位存储在低地址上

例如:内存中看到的:36 94 11 00 实际这个数是 00 11 94 36

1.图片是黄色的:

    bmp图片它的颜色色值数据排列顺序是: 蓝  绿  红

    屏幕像素点颜色色值数据排列顺序是:  红  绿  蓝

2.图片是倒着的

    bmp图片的坐标原点是左下角

    屏幕的坐标原点是左上角

常用系统IO函数

1. access

头文件:  #include <unistd.h>

                #include <fcntl.h>

函数原型: int access(const char* path,int mode)

函数功能:确定文件或文件夹是否存在,及当前用户对文件的访问权限

函数参数:path:  待操作的文件或目录,若path代表目录,则mode 只能取值为 F_OK

                  mode: 判断模式,可取值如下:

                  R_OK:判断文件是否有读权限

                  W_OK  :判断文件是否有写权限

                  X_OK:判断文件是否有执行权限

                  F_OK:判断文件是否存在

函数返回值:成功返回0 代表确认的mode是成立的;

                      失败返回-1 代表确认的mode是不成立的;

                       错误码存放在 errno 中。

2.  open

头文件:  #include <unistd.h>

                 #include <fcntl.h>

函数原型: int open(const char* path,int flags)

                 int open(const char* path,int flags,mode_t mode)

函数功能:打开文件或创建文件

函数参数:path:   待操作的文件

                  flags: 打开标志,可取值如下:

                  必选项:

                     O_RDONLY:只读打开

                     O_WRONLY :只写打开

                     O_RDWR:  读写打开

                  附加项:

                     O_CREAT:   创建

                     O_APPEND:  追加写

                     O_TRUNC:   覆盖写;

                   mode:   如果是新创建文件,用于指定新文件的访问权限:

                   简单方式指定:用表示3位的八进制数(例子:0644)

函数返回值:成功返回文件描述符,用于接下来的文件实际操作;

                      失败返回-1 错误码存放在 errno 中。

例子: open("newfile.txt",O_WRONLY|O_CREAT,0644);

3. read

头文件:  #include <unistd.h>

                #include <fcntl.h>

函数原型: ssize_t read(int fd,void* buf,size_t count)

函数功能:读取文件内容

函数参数:fd:     待操作的文件描述符

                  buf:   已申请的内存首地址,用于存储读取的数据:

                   count:  待读取的字节数

函数返回值:成功返回实际读取的字节数

                    返回0 代表读取到文件末尾;

                    失败返回-1 错误码存放在 errno 中。

4.  write

头文件:  #include <unistd.h>

                #include <fcntl.h>

函数原型: ssize_t write(int fd,const void* buf,size_t count)

函数功能:读取文件内容

函数参数:fd:     待操作的文件描述符

                  buf:   已申请的内存首地址,用于存储待写入的数据:

                   count:  待写入的字节数

函数返回值:成功返回实际写入的字节数

                      失败返回-1 错误码存放在 errno 中。

5. close

头文件:  #include <unistd.h>

                #include <fcntl.h>

函数原型: int close(int fd)

函数功能:关闭文件

函数参数:fd:     待操作的文件描述符

函数返回值:成功返回0

                     失败返回-1 错误码存放在 errno 中。

6. lseek

头文件:    #include <unistd.h>

                   #include <fcntl.h>

函数原型: off_t lseek(int fd, off_t offset, int whence)

函数功能:移动文件位置指针

函数参数:  fd:      待操作的文件描述符

                   offset: 相对于whence 的偏移量

                   whence:  参考位置,取值如下:

                       SEEK_SET    文件头

                       SEEK_CUR    当前位置

                       SEEK_END    文件末尾

函数返回值:成功返回 文件位置指针相对于文件头的偏移量

                      失败返回-1 错误码存放在 errno 中。

7. mmap

头文件:#include <sys/mman.h>

函数原型:   void* mmap(void* addr,size_t size,int prot,int flags,int fd, off_t offset)

                   int   munmap(void* addr,size_t size);

函数功能:映射/解映射 文件到用户程序的地址空间

函数参数:  addr:  映射的内存地址。一般写NULL 让系统决定

                   size:  待映射的空间大小(字节为单位)

                   prot:   映射后内存的访问属性,可取值如下一个或多个的组合:

                   PROT_READ  PROT_WRITE  PROT_EXEC   PROT_NONE

                   flags: 映射标志:可取值如下:

                       MAP_SHARED  MAP_PRIVATE

                   offset: 文件中映射数据的偏移量

                   whence:  参考位置,取值如下:

                       SEEK_SET    文件头

                       SEEK_CUR    当前位置

                       SEEK_END    文件末尾

函数返回值:成功    mmap返回映射后的内存地址

                       munmap返回0

                      失败    mmap返回 MAP_FAILED

                       munmap返回-1 错误码存放在 errno 中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值