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表示失败;

目录
相关文章
|
2月前
|
Linux 数据安全/隐私保护 Windows
命令方式:window向linux传文件
【10月更文挑战第6天】本文介绍了如何在Linux系统中通过命令`ip a`获取IP地址,并在Windows系统下使用CMD命令行工具和SCP命令实现文件传输。示例展示了如何将D盘中的`mm.jar`文件上传至IP地址为192.168.163.122的Linux系统的/up/目录下,最后在Linux系统中确认文件传输结果。
255 65
|
2月前
|
运维 安全 Linux
Linux中传输文件文件夹的10个scp命令
【10月更文挑战第18天】本文详细介绍了10种利用scp命令在Linux系统中进行文件传输的方法,涵盖基础文件传输、使用密钥认证、复制整个目录、从远程主机复制文件、同时传输多个文件和目录、保持文件权限、跨多台远程主机传输、指定端口及显示传输进度等场景,旨在帮助用户在不同情况下高效安全地完成文件传输任务。
298 5
|
2月前
|
Linux Shell 数据库
Linux文件查找新姿势:总有一种你没见过
【10月更文挑战第18天】文件查找是Linux用户提升工作效率的重要技能。本文介绍了几种实用的文件查找方法,包括基础的`find`命令、快速的`locate`和`mlocate`、高效的`fd`工具、以及结合`grep`和`rg`进行内容搜索。此外,还提供了编写Shell脚本和使用图形界面工具的建议,帮助你更灵活地管理文件。
78 3
|
2月前
|
Linux Shell
Linux系统文件默认权限
Linux系统文件默认权限
52 2
|
28天前
|
Linux 开发工具 Perl
在Linux中,有一个文件,如何删除包含“www“字样的字符?
在Linux中,如果你想删除一个文件中包含特定字样(如“www”)的所有字符或行,你可以使用多种文本处理工具来实现。以下是一些常见的方法:
41 5
|
28天前
|
安全 Linux 数据安全/隐私保护
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。本文介绍了使用 `ls -l` 和 `stat` 命令查找文件所有者的基本方法,以及通过文件路径、通配符和结合其他命令的高级技巧。还提供了实际案例分析和注意事项,帮助读者更好地掌握这一操作。
45 6
|
28天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
67 6
|
29天前
|
监控 Linux Perl
Linux 命令小技巧:显示文件指定行的内容
在 Linux 系统中,处理文本文件是一项常见任务。本文介绍了如何使用 head、tail、sed 和 awk 等命令快速显示文件中的指定行内容,帮助你高效处理文本文件。通过实际应用场景和案例分析,展示了这些命令在代码审查、日志分析和文本处理中的具体用途。同时,还提供了注意事项和技巧,帮助你更好地掌握这些命令。
43 4
|
1月前
|
网络协议 Linux
linux系统重要文件目录
本文介绍了Linux系统中的重要目录及其历史背景,包括根目录、/usr、/etc、/var/log和/proc等目录的结构和功能。其中,/etc目录下包含了许多关键配置文件,如网卡配置、DNS解析、主机名设置等。文章还详细解释了各目录和文件的作用,帮助读者更好地理解和管理Linux系统。
55 2
|
2月前
|
Linux 开发工具 数据安全/隐私保护
linux异常一:feng 不在 sudoers 文件中,此事将被报告。yum提示Another app is currently holding the yum lock; waiting for
这篇文章介绍了在CentOS 7系统中安装Docker时遇到的两个常见问题及其解决方法:用户不在sudoers文件中导致权限不足,以及yum被锁定的问题。
42 2
linux异常一:feng 不在 sudoers 文件中,此事将被报告。yum提示Another app is currently holding the yum lock; waiting for