目录
标准IO和文件IO的区别:
1.标准IO是库函数,是对系统调用的封装
2.文件IO是系统调用,是Linux内核中的函数接口
3.标准IO是有缓存的
4.文件IO是没有缓存的
IO:
b
c
d
- 标准IO(只有-能用标准IO)
l
s
p
文件IO:
1.操作步骤:
打开 -> 读/写 -> 关闭
打开文件: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_APPEND 追加
O_ASYNC 异步IO
O_CREAT 文件不存在创建
O_TRUNC 文件存在截断(清0)
要增加更多的标志位需要用按位或的方式把他们的标志位写在一起。 open(const char *pathname,O_RDONLY | O_TRUNC,0664)
0664,是当追加标志位之后必须要加的权限,mode,
就是 ls -l之后,前面的rwx--rwx--rwx 第一组是创建用户对该文件的权限,第二组是创建文件的同组的对文件的权限,第三个是其余人对文件的权限
rwx--rwx--rwx
111--111--111
八进制就是0777,那0664就是rw--rw--r。
返回值:
成功返回文件描述符(很小的非负整数)
失败返回-1
新生成的文件描述符总是为尚未被使用的最小的非负整数,012被使用所以从3
开始。
0: stdin
1: stdout
2: stderr
在流中,前面的数字就可以代表后面的流eg:close(1)关闭stdout
关闭文件:close
int close(int fd);
功能:
将fd对应的文件描述符关闭
读写:
read/write
1.write
ssize_t write(int fd, const void *buf, size_t count);
功能:
向fd对应的文件中写入buf指向的count个字节
参数:
fd:文件描述符
buf:写入数据空间首地址
count:写入的字节数
返回值:
成功返回实际写入字节数
失败返回-1
2.read
ssize_t read(int fd, void *buf, size_t count);
功能:
从文件描述符fd对应的文件中读取count个字节存放到buf开始的空间中
参数:
fd:文件描述符
buf:存放数据空间的首地址
count:想要读取数据字节数
返回值:
成功返回实际读到的字节数
失败返回-1
读到文件末尾返回0
1. lseek
off_t lseek(int fd, off_t offset, int whence); 这个函数也是覆盖
功能:
重新设定文件描述符的偏移量
参数:
fd:文件描述符
offset:偏移量 正数就是向前移动,负数就是向后移动
whence:
SEEK_SET 文件开头
SEEK_CUR 文件当前位置
SEEK_END 文件末尾
返回值:
成功返回当前偏移量
失败返回-1
rename
-
rename
:这是命令的名称,表示执行文件重命名的操作。 -
's/a\.c$/b.a/'
:这是rename
命令中的一个参数,用于指定重命名规则。在这里,'s/a\.c$/b.a/'
是一个正则表达式替换模式,具体解释如下:s/
:这是替换操作的标志,表示将要进行替换。a\.c$
:这是正则表达式的模式部分。在正则表达式中,.
表示任意单个字符,而\.
表示实际的点字符(.
)。因此,a\.c
匹配的是文件名中的a.c
部分。a
:匹配字母 'a'。\.
:匹配一个点字符。c
:匹配字母 'c'。$
:这是正则表达式的锚点,表示匹配行尾。在这里,它确保文件名以.c
结尾。
b.a
:这是替换部分,表示用来替换匹配的内容。在这里,b.a
意味着将匹配的文件名替换为b.a
。
-
a.c
:这是rename
命令的另一个参数,表示要被重命名的文件。在这里,它指定了文件名为a.c
。
综上所述,这个命令的含义是将当前目录中的文件名为 a.c
的文件重命名为 b.a
。
在 rename
命令中,常用的参数有:
-
-v
或--verbose
:显示详细信息,包括执行了哪些重命名操作。- 例如:
rename -v 's/old_pattern/new_pattern/' *
- 例如:
-
-n
或--no-act
:测试模式,显示将执行的重命名操作,但不实际执行。- 例如:
rename -n 's/old_pattern/new_pattern/' *
- 例如:
-
-f
或--force
:强制执行操作,即使目标文件已存在也覆盖它。- 例如:
rename -f 's/old_pattern/new_pattern/' *
- 例如:
-
-e
或--expr
:指定 Perl 表达式来执行重命名操作。- 例如:
rename -e 's/old_pattern/new_pattern/' *
- 例如:
-
-h
或--help
:显示帮助信息,列出命令的使用方法和参数说明。- 例如:
rename -h
- 例如:
以上是 rename
命令中的一些常用参数及其解释。你可以通过运行 rename --help
查看所有可用参数的完整列表和详细说明。