小阳同学嵌入式学习日记-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
    评论
这些函数都是Linux系统调用,用于在用户空间程序和内核空间之间进行数据传输、设备控制等操作。 1. open(): 打开一个文件或设备,返回该文件或设备的文件描述符,该描述符用于后续的读、写、控制和关闭操作。语法如下: ``` #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); ``` 2. close(): 关闭一个文件或设备,释放该文件或设备占用的系统资源。语法如下: ``` #include <unistd.h> int close(int fd); ``` 3. read(): 从一个文件或设备中读取数据到指定的缓冲区中,返回实际读取的字节数。语法如下: ``` #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); ``` 4. write(): 将数据从指定的缓冲区中写入到一个文件或设备中,返回实际写入的字节数。语法如下: ``` #include <unistd.h> ssize_t write(int fd, const void *buf, size_t count); ``` 5. lseek(): 在一个文件或设备中定位到指定的位置,返回新的位置偏移量。语法如下: ``` #include <unistd.h> off_t lseek(int fd, off_t offset, int whence); ``` 6. ioctl(): 对一个设备进行控制和定位操作,需要使用特定的命令码,并可携带相应的参数。语法如下: ``` #include <sys/ioctl.h> int ioctl(int fd, unsigned long request, ...); ``` 这些函数在Linux系统编程中非常常用,尤其是在设备驱动开发中。熟练掌握这些函数的使用方式和原理,对于开发高质量的Linux应用程序和驱动非常有帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值