最新消息:yaf表单扩展中新增加了浮点数、日期和集合的校验。php yaf框架扩展实践三——表单

linux c文件操作记录(open creat lseek read close)

C语言 2004浏览 0评论

linux下操作文件的练习,分为打开、写、读和关闭文件,特此记录一下内容和碰到的问题。

#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

int main(void)
{
	//打开一个文件
	int f;
	f = open("test.log", O_RDWR | O_APPEND | O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO);
	printf("%d\n", f);

	//写
	char wbuf[13] = "Hello world!\n";
	write(f, wbuf, sizeof(wbuf));

	//将文件偏移量移到文件开始
	lseek(f, 0, SEEK_SET);

	//读
	char rbuf[12];
	int size;
	size = read(f, rbuf, sizeof(rbuf) - 1);
	printf("%d\n", size);
	rbuf[size] = '\0';
	printf("%s\n", rbuf);

	//关闭文件
	close(f);
	
	return 0;
}

打开文件函数open第二个参数表示打开文件的权限,其中

O_RDWR表示读写方式
O_APPEND表示已追加的方式进行写
O_CREAT表示文件不存在的时候会进行创建

第三个参数表示创建文件时文件的权限,其中

S_IRWXU表示user权限是rwx
S_IRWXG表示group权限为rwx
S_IRWXO表示other权限为rwx

当然这不是最后文件的权限,最后的文件权限还和umask有关,关于umask可以参考:linux中的umask含义理解

写文件函数write指明写入的字符串和长度。写完文件后lseek函数将文件偏移量会在文件尾,下面读取文件的时候如果不将偏移量移到开头,则读不到内容。另外使用O_APPEND的方式打开文件也会使得偏移量指向文件尾。

读取文件指明接收的字符创和读取的长度。读取时发现一个乱码问题,是因为rbuf没有结束字符\0导致,所以这里只读取11个字符,最后一个字符定为\0表示结束。

最后关闭文件。

测试的过程中还碰到如下文件:

file/fnctl.c:14:2: warning: implicit declaration of function 'write' is invalid
      in C99 [-Wimplicit-function-declaration]
        write(f, buf, 12);
        ^
1 warning generated.

最后发现是因为没有

#include <unistd.h>

所致。

转载请注明:快乐编程 » linux c文件操作记录(open creat lseek read close)

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址