linux下操作文件的练习,分为打开、写、读和关闭文件,特此记录一下内容和碰到的问题。
#include
#include
#include
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
所致。