Linux下文件编程

简介: 一、系统调用方式访问文件 1、创建文件:int creat(const char *filename,mode_t mode) filename为要创建的文件名(包含路径,默认为当前路径); mode为创建的文件属性,0无任何权限,1可执行,2可写,4可读,6可读可写; 要创建一个用户可读、可写、可执行,但是组没有权限,其他人可以读、可以执行的文件,并设置用户ID位。

一、系统调用方式访问文件

1、创建文件:int creat(const char *filename,mode_t mode)

filename为要创建的文件名(包含路径,默认为当前路径);

mode为创建的文件属性,0无任何权限,1可执行,2可写,4可读,6可读可写;

要创建一个用户可读、可写、可执行,但是组没有权限,其他人可以读、可以执行的文件,并设置用户ID位。那么,我们应该使用的模式是1(设置用户ID)、0(不设置组ID)、7(1+2+4,读、写、执行)、0(没有权限)、5(1+4,读、执行)即10705: 

2、打开文件:

int open(const char *pathname,int flags)

int open(const char *pathname,int flags,mode_t mode)

open函数有两个表示形式。pathname为要打开的文件名(包含路径,缺省为当前路径);

flags为打开文件的标志;

O_RDONLY以只读方式打开,O_WRONLY以只写的当时打开,O_RDWR以读写方式打开,O_APPEND以追加的方式打开

O_CREAT创建一个文件,O_EXEC如果使用O_CREAT而已经存在一个文件,会发生错误;

如果使用O_CREAT标志,则要使用第二个open函数,同时要指定mode属性;表示如果open打开的pathname不存在,则创建一个文件为mode属性的文件,mode指定文件的权限;

3、关闭:int close(int fd)

fd为文件描述符,文件描述符本身就是一个非负整数,在0---OPEN_MAX之中,OPEN_MAX表示一个线程同时能打开的最大文件数,现在一般的OPEN_MAX值为:1024

在open函数中,成功打开一个文件的函数返回值就是这个文件的描述符,close函数可通过这个描述符来关闭文件;

4、读写文件:

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

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

buf为缓冲区,length为读写的字节大小;表示在fd指定的文件中读取length个字节大小的长度,保存在buf的缓冲区中;

函数的返回值为读写的实际字节大小。

5、文件定位:int lseek(int fd,offset_t offset,int whence)

lseek()将文件读写指针相对于whence移动offen个字节,返回值为指针相对于文件头的位置;

whence的属性有:SEEK_SET相对于文件头,SEEK_CUR相对于读写指针当前位置,SEEK_END相对于文件末

6、访问判断:int access(const char *pathname,int mode)

二、库函数访问文件

1、创建和打开:FILE *fopen(const char *pathname,const char *mode)

r以只读方式打开,w以只写方式打开,如果文件不存在,则创建文件,否则文件被截断,a以追加的方式打开,如果文件不存在,则创建文件,r+以读写方式打开,w+以读写方式打开,如果文件不存在,则创建文件,否则文件被截断,a+以读和追加的方式打开,如果不存在,则创建新文件;

2、读写

size_t fread(void *ptr,size_t size,size_t n, FILE *stream)

从stream中读n个段为size字节,并放在ptr所指的数组中,返回值是实际读取的字节数;

size_t fwrite(const void *ptr,size_t size,size_t n,FILE *stream)

3、读写字符:

int fgetc(FILE *stream)

int fputc(int c,FILE *stream)

fscanf(FILE *stream,char *format[,argument....])格式化输入

int fprintf(FILE *stream,char *format[,argument....])

4、文件定位:int fseek(FILE *stream,long offset,int whence)

whence的属性有:SEEK_SET相对于文件头,SEEK_CUR相对于读写指针当前位置,SEEK_END相对于文件末

5、获取当前路径:char *getcwd(char *buffer,size_t size)

提供size大小的buffer,把当前路径保存到buffer中;

6、创建目录:int mkdir(char *dir,int mode)

返回值:0表示成功,1表示失败;

目录
相关文章
|
18天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
72 1
|
21天前
|
Linux 数据安全/隐私保护 Windows
Linux入门指南:linux权限究竟是什么?和文件有什么关系?
Linux入门指南:linux权限究竟是什么?和文件有什么关系?
30 0
|
23天前
|
算法 Linux C++
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
29 0
|
23天前
|
算法 Linux C++
【Linux系统编程】深入解析Linux中read函数的错误场景
【Linux系统编程】深入解析Linux中read函数的错误场景
196 0
|
16天前
|
人工智能 安全 Linux
【Linux】Linux之间如何互传文件(详细讲解)
【Linux】Linux之间如何互传文件(详细讲解)
|
23天前
|
存储 算法 Linux
【Linux系统编程】深入理解Linux目录扫描函数:scandir目录函数(按条件扫描目录
【Linux系统编程】深入理解Linux目录扫描函数:scandir目录函数(按条件扫描目录
37 0
|
23天前
|
存储 算法 Linux
【Linux系统编程】Linux 文件系统探究:深入理解 struct dirent、DIR 和 struct stat结构
【Linux系统编程】Linux 文件系统探究:深入理解 struct dirent、DIR 和 struct stat结构
36 0
|
1天前
|
安全 Linux 开发工具
Linux中可引起文件时间戳改变的相关命令
【4月更文挑战第12天】Linux中可引起文件时间戳改变的相关命令
7 0
|
2天前
|
Linux Shell 开发工具
Linux文件常用操作
Linux文件常用操作(几乎覆盖所有日常使用)
55 0
|
4天前
|
Linux 内存技术 Perl
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件