Linux文件的通用操作方法
open()
函数原型
int open(
const char* pathname,
int flags);
int open(
const char* pathname,
int flags,mode_t mode);
open()函数解析
返回值:函数成功返回一个文件描述符,失败返回-1。pathname:要打开的文件路径,通常不超过1024个字节,否则会发生截断。flags:设置文件打开后允许的操作方式。 mode:文件权限flag部分详解参考http://linux.die.net/man/3/open
必选之一flags解析
O_RDONLY只读(ReaDONLY),定义为0O_WRONLY只写(WRiteONLY),定义为O_RDWR读写(ReaDWRite),定义为2部分可选flags解析O_APPEND追加(APPEND),每次进行写操作都追加在文件的尾端O_CREATE创建(CREATE),如果文件不存在则创建它,当使用此参数的时候,必须设置mode,说明新文件权限O_EXCL如果与O_CREAT同时设置,此指令会去检查文件是否存在,文件若不存在则建立该文件,否则将导致打开文件错误。此外,若O_CREAT与O_EXCL同时设置,并且将要打开的文件为符号连接,则将导致打开文件失败O_TRUNC清空(TRUNCate)将文件截断为0。
close()
函数原型
int close(
int fd);
close()函数解析
返回值: 成功返回0,失败-1。fd:文件描述符。tips:如果一个进程中文件没有正常关闭文件,当进程推出的时候系统会自动关闭打开的文件。之所以要关闭是因为系统文件描述符数量有限制。
read()
函数原型
sszie_t read(
int fd,
void *buf,size_t count);
close函数解析
返回值:成功返回读取的字节,出错返回-1,已经到达文件末尾返回0。fd:文件描述符,可以由open函数获得。count:请求读取的字节,实际读取的字节可能小于count。如,文件剩余的字节小于count。
write()
函数原型
ssize_t write(
int fd,
const void * buf,size_t count);
函数解析
返回值:成功返回写入的字节,出错返回-1。fd:文件描述符buf:要写入的数据的指针count 写入的数据大小
lseek()
函数原型 c off_t lseek(int fd, off_t offset, int whence); 函数解析
返回值:操作成功返回新文件心得文件偏移量的值,失败返回-1,offset:偏移量whence:操作模式
whence含义
SEEK_SEToffset的值为相对文件的开始处SEEK_CURoffset的值为相对当前的位置SEEK_ENDoffset为相对文件的尾端的位置
fstat()
函数原型
int fstat(
int fd,
struct stat *buf);
函数解析
返回值:成功返回0,失败返回-1。fd:文件描述符。struct stat :
struct stat {
dev_t st_dev;
ino_t st_ino;
mode_t st_mode;
nlink_t st_nlink;
uid_t st_uid;
gid_t st_gid;
dev_t st_rdev;
off_t st_size;
blksize_t st_blksize;
blkcnt_t st_blocks;
time_t st_atime;
time_t st_mtime;
time_t st_ctime;
};
tips:存在两个类似函数
int stat(
const char *path,
struct stat *buf);
int lstat(
const char *path,
struct stat *buf);
path:文件路径。区别:当 path参数为符号链接文件时lstat列出的符号链接本身的文件信息。
mmap()与munmap
函数原型
void *mmap(
void *addr, size_t length,
int prot,
int flags,
int fd, off_t offset);
int munmap(
void *addr, size_t length);
函数解析
mmap返回值: 成功返回映射内存的地址,失败返回(void*)-1;\munmap返回值:成功0,失败-1。addr: 指定的映射内存地址,通常为NULL。length:文件映射到内存的字节大小。prot:映射区保护方式。fd:要映射到内存的文件的文件描述符。offset:文件偏移量。映射到内存中的文件数据是起始于offset长为length的数据tips:munmap解除映射,addr由mmap函数获得,参数length 则是欲取消的内存大小。
fcntl()
函数原型
int fcntl(
int fd,
int cmd);
int fcntl(
int fd,
int cmd,
long arg);
int fcntl(
int fd,
int cmd,
struct flock *lock);
函数解析
返回值:成功返回值依赖于cmd,例如:cmd= F_DUPFD 返回新的文件描述符;cmd=F_GETFD 返回相应标志;cmd=F_GETFL ,F_GETOWN 返回一个正的进程ID或负的进程组ID;失败返回-1。fd:被cmd操作的文件的文件描述符。cmd:操作命令;详细请参考http://linux.die.net/man/2/fcntlarg:根据cmd的值可以设置arg参数;lock:同上;tips:fcntl用来改变或者获取打开文件的属性。
ioctl()函数
函数原型
int ioctl(int d, int request,
...);
函数解析
tips: ioctl()通过文件描述符对文件发送特定的命令来控制文件描述符所代表的设备。返回值:失败-1;成功大于等于0,取决于设备驱动对命令的处理request:用户程序对设备的控制命令。…:补充参数。
转载请注明原文地址: https://ju.6miu.com/read-1300194.html