底层文件访问

本文详细介绍了Linux下底层文件访问的相关系统调用,包括write、read、open、close、ioctl以及lseek等,阐述了如何通过这些调用进行文件读写、打开、关闭、设置访问权限及文件指针操作。此外,还提到了fstat、stat和lstat等用于获取文件状态信息的系统调用,以及dup和dup2用于复制文件描述符的功能。
摘要由CSDN通过智能技术生成

底层文件访问

每个运行中的程序被称为进程( process),它有一些与之关联的文件描述符。这是一些小值整数,你可以通过它们访问打开的文件或设备。有多少文件描述符可用取决于系统的配置情况。当一个程序开始运行时,它一般会有3个已经打开的文件描述符:

  • 0:标准输入
  • 1:标准输出
  • 2:标准错误

你可以通过系统调用open把其他文件描述符与文件和设备相关联,稍后讲解。其实使用自动打开的文件描述符就已经可以通过write系统调用来创建一些简单的程序了。

write系统调用

系统调用write的作用是把缓冲区buf的前nbytes个字节写入与文件描述符fildes关联的文件中。它返回实际写入的字节数。如果文件描述符有错或者底层的设备驱动程序对数据块长度比较敏感,该返回值可能会小于nbytes。如果这个函数返回0,就表示未写入任何数据;如果它返回的是-1,就表示在write调用中出现了错误,错误代码保存在全局变量errno里。
下面是write系统调用的原型:

#include <unistd.h>
size_t write(int fildes,const void *buf, size_t nbytes);

有了这些知识,你就可以编写第一个程序simple_write.c了:

#inelude <unistd.h>
#inciude <stalib.h>
int main()
{
   
	if ((write(1, "Here is some data\n", 18)) != 18)
		write(2, "A write error has occurred on file descriptor 1\n",46);
		exit(0);
}

这个程序只是在标准输出上显示一条消息。当程序退出运行时,所有已经打开的文件描述符都会自动关闭,所以你不需要明确地关闭它们。但处理被缓冲的输出时,情况就不一样了。

需要再次提醒的是,write可能会报告写入的字节比你要求的少。这并不一定是个错误。在程序中,你需要检查errno以发现错误,然后再次调用write写入剩余的数据。

read系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值