小阳同学嵌入式学习日记-open()、write()、read()、close()、lseek()

一、open() 

   open() 函数是一个 POSIX 标准中定义的系统调用,用于打开文件或者创建文件。通过 open() 函数,程序可以获取到一个文件描述符,从而可以对文件进行读取、写入、修改等操作。 

   open() 函数的原型如下: 

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int open(const char *pathname, int flags);

 其中:

  1. pathname 是要打开或者创建的文件的路径名。
  2. flags 是打开文件的标志,指定文件的打开方式和访问权限。常见的标志包括:
  • O_RDONLY只读方式打开文件。
  • O_WRONLY只写方式打开文件。
  • O_RDWR读写方式打开文件。
  • O_CREAT如果文件不存在,则创建文件。
  • O_TRUNC如果文件存在且成功打开为写入,则将其长度截断为0。
  • O_APPEND在每次写入操作时,将数据追加到文件末尾。
  • 等等,还有其他标志用于控制文件的打开方式和行为。

         open() 函数返回一个文件描述符,如果操作成功,则返回新打开文件的文件描述符;如果失败,则返回 -1,并设置 errno 表示错误类型。使用 open() 函数,程序员可以打开已存在的文件或者创建新的文件,并且可以通过返回的文件描述符进行文件的读写操作。在打开文件时,程序员可以根据需要指定不同的打开方式和访问权限,从而满足不同的需求。

二、write() 

          write() 函数是一个 POSIX 标准中定义的系统调用,用于向文件描述符或者套接字写入数据。它的原型如下:

#include <unistd.h>

ssize_t write(int fd, const void *buf, size_t count);

其中:

  • fd 是要写入数据的文件描述符或者套接字。
  • buf 是要写入的数据的缓冲区的起始地址。
  • count 是要写入的数据的字节数。

   write() 函数返回值是写入成功的字节数,如果发生错误则返回 -1。在网络编程中,通常使用 write() 函数向套接字写入数据,以发送数据给远程主机使用 write() 函数,程序员可以将数据写入到文件、管道、套接字等支持写操作的文件描述符中。这使得程序可以向文件中写入数据,向管道中写入数据以供其他进程读取,或者通过套接字与远程主机进行通信。

三、read()

    read() 函数是一个 POSIX 标准中定义的系统调用,用于从文件描述符或者套接字读取数据。它的原型如下: 

#include <unistd.h>

ssize_t read(int fd, void *buf, size_t count);

 其中:

  • fd 是要读取数据的文件描述符或者套接字。
  • buf 是用于存储读取数据的缓冲区的起始地址。
  • count 是要读取的最大字节数。

    read() 函数返回值是读取到的字节数,如果返回值为 0,表示已经读取到文件末尾;如果返回值为 -1,表示发生错误。使用 read() 函数,程序员可以从文件、管道、套接字等支持读操作的文件描述符中读取数据。这使得程序可以从文件中读取数据,从管道中读取数据以供处理,或者通过套接字接收远程主机发送的数据。

四、close()

           close() 函数是一个 POSIX 标准中定义的系统调用,用于关闭一个已打开的文件描述符。它的原型如下:

#include <unistd.h>

int close(int fd);

 其中:

  • fd 是要关闭的文件描述符。

    close() 函数返回值是整数型的,如果操作成功,则返回 0;如果失败,则返回 -1,并设置 errno 表示错误类型。使用 close() 函数,程序员可以关闭不再需要的文件描述符,释放系统资源,防止资源泄漏。在文件操作中,关闭文件描述符通常是一个很重要的操作,特别是在程序需要打开大量文件时,及时关闭不再需要的文件描述符可以避免资源浪费和系统资源耗尽的问题。

五、lssek()

    lseek() 函数是一个 POSIX 标准中定义的系统调用,用于在文件中设置文件偏移量(也称为读写位置偏移量)。该函数允许程序员在文件中随意移动读写位置,并且可以用于实现文件的随机访问、定位和修改。

   lseek()函数的原型如下:

#include <unistd.h>

off_t lseek(int fd, off_t offset, int whence);

其中:

  • fd 是已打开文件的文件描述符,表示要操作的文件。
  • offset 是要设置的文件偏移量,可以为正、负或零。正值表示向文件尾方向移动,负值表示向文件头方向移动,零表示从文件头开始计算。
  • whence 是指定偏移量相对位置的参数,可以取以下值:
    • SEEK_SET从文件开头开始计算,偏移量为 offset
    • SEEK_CUR从当前位置开始计算,偏移量为当前位置加上 offset
    • SEEK_END从文件末尾开始计算,偏移量为文件大小加上 offset

    lseek() 函数返回值是调整后的文件偏移量,如果操作成功,则返回新的文件偏移量;如果失败,则返回 -1,并设置 errno 表示错误类型。使用 lseek() 函数,程序员可以实现文件的随机访问,读取或者修改文件的任意位置内容。这对于需要定位和处理大型文件、数据库文件、日志文件等非常有用。

做大做强,再创辉煌! 

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设读者已经掌握了使用C 语言编写程序的技术如果读者没 有掌握这一技术可以参考市面上的一些书目还可以在原来的一 些Dos 下的一些C 开发环境下进行练习如Borland 公司的Dos 下 的TC 或者BC 编译器 手册中的例子都经过验证相应的编译器的版本是V30L02 汇编器的版本是V30L04 链接器的版本是V30L05 要注意的是 有的例子直接使用在编译时会有警告提示有的例子直接使用在链 接时会有出错提示如果读者对照英文的C 语言手册来看会发现 两者有些差别那是因为英文手册所对应的编译器/汇编器/链接器的 版本号较低为此在中文手册中作了修正 目录 前言.............................................................................................................1 目录.............................................................................................................1 第一章 C 预处理器.................................................................................1 第一节 预处理和编译的结构.............................................................................2 第二节 宏定义.....................................................................................................3 一. 不带参数的宏定义...................................................................................3 二. 带参数的宏定义.......................................................................................4 第三节 文件包含(#include 指令) .......................................................................6 第四节 条件编译.................................................................................................7 第五节 其它预处理指令.....................................................................................9 第二章 C 编译器...................................................................................10 第一节 编译的结构...........................................................................................11 第二节 C 编译器的数据调用协议...................................................................12 一. 内存模式和数据在内存中的存储格式.................................................12 二. 与汇编语言程序的接口.........................................................................18 三. SECTION.................................................................................................20 四. 函数调用接口.........................................................................................28 五. 中断函数调用接口.................................................................................34 六. C 编译器的限制...................................................................................36 第三节 C 编译器的特殊扩充...........................................................................38 一. 嵌入汇编.................................................................................................38 二. 中断相关的函数.....................................................................................41 三. I/O 变量的定义.......................................................................................46 四. direct 变量的定义...................................................................................47 五. 近程/远程变量(或函数)的定义.............................................................48 六. 函数的内嵌扩展.....................................................................................50 七. 更改SECTION 名..................................................................................52 八. 寄存器区的设置.....................................................................................53 九. 中断级别的设置.....................................................................................54 十. 是否使用系统堆栈的设置.....................................................................55 十一. 系统堆栈/用户堆栈都可用的设置...................................................56 十二. 不保存寄存器的中断函数.................................................................57 十三. 内置的函数.........................................................................................58 十四. 预定义的宏.........................................................................................63 第三章 C 库函数...................................................................................64 第一节 库函数概述...........................................................................................65 一. 库文件和内存模式..........................................................................65 二. 头文件.....................................................................................................66 三. 库文件对应的SECTION 和内存模式..................................................66 四. 依赖于系统的库函数.............................................................................66 第二节 库函数的协作.......................................................................................68 一. 库函数协作.............................................................................................68 二. 初始化和退出函数.................................................................................68 三. 低级库函数类型.....................................................................................68 四. 标准库函数和其所需调用的低级库函数.............................................69 第三节 低级库函数的详细说明.......................................................................70 一. open 函数................................................................................................70 二. close 函数...............................................................................................71 三. read 函数.................................................................................................71 四. write 函数................................................................................................72 五. lseek 函数...............................................................................................72 六. isatty 函数...............................................................................................73 七. sbrk 函数.................................................................................................73 八. _exit 函数................................................................................................74 九. _abort 函数.............................................................................................74 第四章 嵌入式C 语言的特殊之处......................................................75 第一节 StartUp 启动文件.................................................................................76 一. 如果强行不使用StartUp 启动文件..............................................76 二. 使用一个简单的StartUp 启动文件......................................................77 三. 随富士通C 编译器附带的StartUp 启动文件.....................................78 第二节 C 语言与汇编语言互相调用以及嵌入汇编.......................................82 附录一.......................................................................................................87 1 编译选项与集成开发环境........................................................................87 附录二.......................................................................................................96 1 库函数定义的类型,宏和函数...................................................................96

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值