Linux 文件编程入门

昨天,正式向Linux系统编程进军了,首先学习的便是文件编程。总的来说,文件编程有六个API,即创建,打开,读,写,关闭,定位。下面,将一一做介绍。
先来说说创建吧:

int creat(const char *filename,mode_t mode);

这里的creat即为系统所创建的函数,我们只需要调用它便可以 ,这个函数,便可称为API。它返回的是文件描述符fd,在后续某些API中,这个文件描述符fd可以当作文件名使用(个人理解)。
举个例子吧,

fd = creat("temp.txt",0644);

这里的temp.txt就是我们要创建的文件名称,0644代表八进制的权限信息,R4,W2,X1,八进制的读写执行。

打开:

Ⅰ、 int open(const char *filename,int flags);

还有一种是

Ⅱ、int open(const char *filename,int flags,mode_t mode);

第一种通常是打开一个已经存在的文件,如open("temp.txt",06);这个代表以读写方式打开temp.txt的文件。
第二种有点类似vim命令,即若存在便打开,不存在就以文件名创建一个新的文件,如open("temp.txt",O_CREAT|O_RDWR,0644);其中O_CREAT代表创建的意思,该行即表示若不存在,则创建一个名为temp.txt的文件,0644代表三方的权限,O_RDWR表示创建完毕后以读写方式打开 。
他们的返回值也都是文件描述符fd。
读写:

int read(int fd,const void *buf,size_t length);      int write(int fd,const void *buf,size_t length);

其中fd即为上文中提到的文件描述符,buf是一个缓冲区,可以理解为,把文件中的length个字节内容读取存储在buf中,或者把缓冲区buf中的内容写道文件中。
下面举个例子:

#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>

int main()
{
	int fd;
	
	char w_buf[7] = "666666";
	char r_buf[7];
	
	int i;
	
	if( (fd = open("sixsixsix.txt",O_CREAT|O_RDWR,0644)) == -1)
	{
		perror("open error\n");
		exit -1;
	}
	
	for(i = 0;i < 6; i++)
	{
		if( write(fd,w_buf,6) < 0)
		{
			perror("write error\n");
			exit -1;
		}
		else
		{
			write(fd,"\n",1);
		}
	}

    return 0;
}

这个代码运行的结果是创建一个名为sixsixsix.txt的文本,内容截图如下
在这里插入图片描述
这个例子中,诠释了fd以及open,write,read的用法。
其中perror作用为,系统调用出现错误时候,打印括号中字符串提示信息,还会给出errno.h中的错误提示宏中的字符串。
关闭:

int colse(int fd);

值得注意的是,关闭函数只是清楚了fd所占用的信息空间,而所创建的文件依旧存在,若关闭失败返回-1。
还有最后一个定位函数:
格式int lseek(int fd,offset_t offset,int whence);其中offset可以理解为偏移量,whence为相对文件位置,可以有三个取值,SEEK_SET,SEEK_CUR,SEEK_END,分别是文件头,当前位置,文件尾。
举个例子,当写入一段文档后,写入如下代码lseek(fd,100,SEEK_CUR);,则会空出100个字符的空白区,接着在填入其他内容。

#include <stdio.h>
#include <stdlib.h>

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

int main()
{
	int fd;
	
	char buf1[10] = "China";
	char buf2[15] = "HIKVision";
	
	fd = open("HIK.txt",O_CREAT|O_RDWR,0644);
	
	write(fd,buf1,5);
	
	lseek(fd,128,SEEK_CUR);
	
	write(fd,buf2,9);
	
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值