目录
linux内核提供了许多有关文件操作的函数,我们可以使用man手册进行查看相关函数
linux内核提供了许多有关文件操作的函数,我们可以使用man手册进行查看相关函数
一. 文件的打开与创建
1.1 函数所需的头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
1.2 函数原型
int open(const char *pathname, int flags); //打开指定路径的文件,并返回一个文件描述符。第二个参数flags表示打开文件的模式和选项。
int open(const char *pathname, int flags, mode_t mode); //类似于上面的open()函数,但是还可以指定文件权限。第三个参数mode用于设置新创建文件的权限。
int creat(const char *pathname, mode_t mode); //创建一个新文件,并返回一个文件描述符。与open()函数相比,它是一个简化的版本,只用于创建文件,不能用于其他模式或选项。
1.3 文件描述符
open()函数调用成功时,它们会返回一个未被进程打开的最小的文件描述符,可以用于后续的文件操作系统调用。
1.4 参数取值
Flags:
O_RDONLY 只读打开 | O_WRONLY只写打开 | O_RDWR可读可写打开 |
下列常数是可以选择的:
*O_CREAT 选项打开文件时,如果文件不存在,则会创建一个新文件。如果文件已经存在,则不会对文件做任何修改,并继续以指定的模式打开该文件。
*O_EXCL 选项与 O_CREAT 选项一起使用时,用于在创建文件时检查文件是否已经存在。如果文件已经存在,则打开文件操作将失败(返回 -1)。这样可以避免在多个进程或线程同时尝试创建同一个文件时发生冲突。
*O_TRUNC 选项打开文件时,如果文件中本来是有内容的,而且为只读或只写打开,则将其长度截为0(清空文件内容)。
* O_APPEND 选项打开文件时,每次写入数据时都会将数据追加到文件末尾,而不是覆盖原有内容。这样可以确保新写入的数据始终添加到文件的末尾。
二. 文件的写入操作
2.1 函数所需的头文件
#include<unistd.h>
2.2 函数原型
ssize_t write(int fd , const void *buf , size_t count); //buf:表示一个指向要写入数据的缓冲区的指针。 size_t count: 表示要写入文件的大小。
三. 文件的读取操作
3.1 函数所需的头文件
#include<unistd.h>
3.2 函数原型
ssize_t read(int fd , void *buf , size_t count); //从fd指向的文件中读取count个字节放入到buf指针指向的缓冲区当中。
四. 光标位置操作
执行完文件的写入后,光标会处于文件末尾,若此时直接进行读取,会读取为空,需将光标移至开头。
4.1 函数所需的头文件
#include <sys/types.h>
#include <unistd.h>
4.2 函数原型
off_t lseek(int fd, off_t offset, int whence); //offset:表示偏移量。 whence:指示重新定位方式的参数,有以下三个选项:
SEEK_SET:将光标移至开头。
SEEK_CUR :光标位置不变。
SEEK_END:将光标移至末尾。
五.关闭文件操作:
当我们执行完相关操作后,需调用close(fd)函数关闭文件,是因为我们对文件的操作都是针对动态文件进行操作的,而不是对静态文件,当我们对动态文件进行操作后,此时它就与静态文件不同步了,当我们close关闭动态文件时,内核会去更新静态文件。
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
int main(){
int fd;
fd = open("/home/orangepi/kk.txt", O_RDWR); //可读可写形式打开指定路径的文件
printf("fd = %d\n", fd);
if (fd < 0) {
printf("open file fail\n");
fd = open("/home/orangepi/kk.txt", O_RDWR | O_CREAT, 0644);
if (fd > 0) {
printf("establish file success\n");
} else {
perror("Failed to create file");
return 1;
}
}
char writeBuf[] = "mimimimi";
write(fd, writeBuf, strlen(writeBuf));
// 将文件指针移到文件开头
lseek(fd, 0, SEEK_SET);
char readBuf[32] = {'\0'};
int r_size = read(fd, readBuf, sizeof(readBuf) - 1); // 确保缓冲区结尾有 '\0'
printf("r_size = %d, readBuf = %s\n", r_size, readBuf);
close(fd);
return 0;
}
六. VMware中Ubuntu操作系统配置
6.1 Ubuntu安装中文输入法
(1)sudo apt install fcitx-libpinyin 安装fcitx输入法框架
(2)打开语言支持
设置键盘输入法系统为 fcitx 4 ,然后选择应用到整个系统 ,再重启系统 ,重启后屏幕上方会出现一个小键盘标志
(3)进行配置
点击configure,点击下方+号添加语言,取消Only show Current Language勾选,搜索libpinyin并添加。
(4)如何设置切换输入法快捷键
进入fcitx全局配置,修改切换激活/非激活输入法即可
6.2 VsCode如何通过SSH连接Ubuntu
(1) 首先,确保您的系统已更新到最新的软件包。在终端中运行以下命令:
sudo apt update
(2) 安装OpenSSH服务器,在终端中运行以下命令:
sudo apt install openssh-server
(3) 修改SSH服务器配置文件以允许Root用户登录。在终端中运行以下命令:
sudo vim /etc/ssh/sshd_config
找到#PermitRootLogin prohibit-password这一行,在其下一行输入 PermitRootLogin yes。
(4) 检查SSH服务状态。在终端中运行以下命令:
sudo systemctl status sshd,确保SSH服务正在运行。
(5)打开VS Code,进行连接Ubuntu。