编写代码时需包含以下头文件:
open函数:
int open(const char *pathname,int flags);
int open(const char *pathname,int flags,mode_t mode);
pathname:要打开的文件名(含路径,若缺省则为当前路径).
在使用此函数前,需定义文件描述符,每个文件对应一个文件描述符,以打开想要打开的文件
flags(表示此文件可操作的权限):
O_RDONLY 只读打开 O_WRONLY 只写打开 O_RDWR 可读可写打开
附带上面三种权限后,打开的文件就只能按照这种权限来操作。下列还有一些可选择的常数:
O_CREAT 若文件不存在则创建它。
其中,0600代表可操作的权限,可读:r/4,可写w/2,可执行x/1,故0600代表可读可写权限(4+2)
运行结果如下:
O_EXCL 如果同时指定了O_CREAT,而文件已经存在,则打开文件失败。(要和OCRET一起使用)
O_APPEND 每次写时都加到文件的尾端。选用后,写入文件里的新内容不会覆盖原有内容。若没有此指令,则会覆盖相应字节的内容。
例:原文件含有内容为12345678,使用此指令后,代码及运行结果如下:
O_TRUNC 属性去打开文件时,若文件本身有内容,则全覆盖。
write函数:
写入函数,将想要写入的数据写入到对应文件内
ssize_t write(int fd,const void *buf,size_t count);(文件描述符,指向数据的指针,写入文件的大小)
写入成功,返回整数;写入失败,返回-1.
代码如下:
补充一下:close()函数,在读写完成后需要关闭文件,用此函数,括号内为文件对应的描述符。
read函数:
ssize_t write(int fd,const void *buf,size_t count);含义与write一致
(malloc返回值为void *,故将所开辟内存存到指针内时需要强制转换),readBuf为存放写入数据的指针
全部代码如下:
编译运行后结果如下:
从结果可以看到,读取内容失败了。原因是在内容写入完毕后,光标的位置会自动定位到输入内容的最后一个字符,所以在读取时,只能读取到内容后方的内容(空气)。
解决方法:①写入完成后,在读取前编写重新打开文件的代码:
②移动光标:
引入一个新函数lseek():
off_t lseek(int fd,off_t offset,int whence);(文件描述符,偏移值,光标位置)
Whence(位置)分为以下三种情况:
SEEK_SET: 指向文件头
SEEK_CUR: 指向文件当前位置
SEEK_END: 指向文件尾部
offset是对whence的偏移值。代码如下:
其中,偏移值为负代表向前偏移,为正代表向后偏移。
关于如何通过代码计算文件大小:
creat函数:
int creat(const char *filename,mode_t mode);
其中filename表示要创建的文件名(包含路径,若缺省为当前路径)
mode为创建模式(可读、可写or可执行)
常见创建模式:
S_IRUSR 4 可读
S_IWUSR 2 可写
S_IXUSR 1 可执行
S_IRWXU 7 可读、写、执行
代码如下:
本文介绍了Linux环境下文件编程的基本操作,包括open函数的使用,详细解析了文件权限标志如O_RDONLY、O_WRONLY、O_RDWR等,并通过示例说明了write和read函数的使用,以及如何通过lseek移动文件光标。还提到了文件创建函数creat及其模式设置。
217

被折叠的 条评论
为什么被折叠?



