linux文件系统和操作方法
Linux文件系统的结构如下:

root: 这是系统管理员(也称为超级管理员)的用户主目录。bin: 这是Binary的缩写,存放最常用的命令。boot: 这里存放启动Linux时使用的核心文件,包括一些连接文件和镜像文件。dev: 这是Device(设备)的缩写,存放Linux的外部设备。Linux中访问设备的方式与访问文件的方式相同。etc: 存放所有配置文件和系统管理所需的配置文件和子目录。home: 用户的主目录,每个用户在Linux系统中都有一个以用户账号命名的目录。var: 存放不断变化的文件数据,通常将经常被修改的目录放在这里,包括各种日志文件。lib: 存放系统最基本的动态链接共享库,类似于Windows中的DLL文件,几乎所有应用程序都会用到这些共享库。usr: 存放系统用户工具和程序,包括:bin: 用户命令sbin: 超级用户使用的管理程序和系统守护程序include: 标准头文件lib: 库文件src: 内核源代码tmp: 用于存放临时文件。media: Linux系统会自动识别一些设备,如U盘、光驱等,并将这些设备挂载到这个目录下。mnt: 用于临时挂载其他文件系统。proc: 包含进程的相关信息。
Linux文件操作方式主要通过文件描述符(fd)进行底层文件操作(系统调用)以及使用I/O库函数。
Linux底层文件操作(关于文件的系统调用)
write函数的使用:
成功:返回实际写入的字节数
失败:返回-1,并设置错误号errno,可使用strerror(errno)查看错误信息
注意:从文件当前指针位置开始写入,文件刚打开时指针指向文件头。
示例:
#include #include #include #include int main(void) { char buff[] = "hello world\n"; //1 2 都是输出到控制台 int len = 0; len = write(1, buff, sizeof(buff)); //标准输出 if (len != -1) { printf("写入成功,写入的字节数为:%d\n", len); } else { printf("写入失败,错误信息为:%s\n", strerror(errno)); } return 0;}

read函数的使用:
返回值大于0——实际读取的字节数
返回值为0——已读到文件尾
返回值为-1——出错
注意:参数3表示最多能接受的字节数,而不是指一定要输入的字节数。
示例:
char buffer[1024];int cnt = read(0, buffer, sizeof(buffer)); //从标准输入读if (cnt > 0) { buffer[cnt] = '\0'; //确保字符串以空字符结尾 printf("读取成功,读取的字节数为:%d,内容为:%s\n", cnt, buffer);} else if (cnt == 0) { printf("已读到文件尾\n");} else { printf("读取失败,错误信息为:%s\n", strerror(errno));}
open函数的使用:
int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);
成功:返回文件描述符
失败:返回-1
打开方式:
O_RDONLY:只读O_WRONLY:只写O_RDWR:读写O_CREAT:如果文件不存在,则创建该文件,并使用第三个参数设置权限;如果文件存在,则只打开文件。O_EXCL:如果同时使用O_CREAT且文件已存在,则返回错误,用于防止多个进程同时创建同一个文件。O_APPEND:尾部追加方式(打开后,文件指针指向文件的末尾)。O_TRUNC:若文件存在,则长度被截为0,属性不变。
第三个参数:设置权限(略)
巧文书
巧文书是一款AI写标书、AI写方案的产品。通过自研的先进AI大模型,精准解析招标文件,智能生成投标内容。
61 查看详情
注意:返回的文件描述符是该进程未打开的最小的文件描述符。
示例:
#include #include #include #include #include #include #include #include #define FILE_RW_LEN 1024int main(void) { //第二个参数-文件存在则无法打开 //O_APPEND —— 追加 int fd = open("./test_open.txt", O_CREAT | O_EXCL | O_RDWR, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH); int count = 0; char buffer[FILE_RW_LEN] = "hello i am test"; if (fd != -1) { count = write(fd, buffer, strlen(buffer)); if (count != -1) { printf("写入成功,写入的字节数为:%d\n", count); } else { printf("写入失败,错误信息为:%s\n", strerror(errno)); } close(fd); } else { printf("打开文件失败,错误信息为:%s\n", strerror(errno)); } return 0;}

close函数的使用:
int close(int fd);
成功:返回0
失败:返回-1
示例:
#include #include #include #include #include #include #include #include #define FILE1_NAME "file1.txt"#define FILE2_NAME "file2.txt"int main(void) { int file1, file2; char buffer[4096]; int len = 0; file1 = open(FILE1_NAME, O_RDONLY); if (file1 != -1) { file2 = open(FILE2_NAME, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR); if (file2 != -1) { while ((len = read(file1, buffer, sizeof(buffer))) > 0) { write(file2, buffer, len); } close(file2); //实战记得判断是否关闭成功 } else { printf("无法打开文件%s,错误信息为:%s\n", FILE2_NAME, strerror(errno)); } close(file1); } else { printf("无法打开文件%s,错误信息为:%s\n", FILE1_NAME, strerror(errno)); } return 0;}
观察耗时:time xxx 程序总的执行时间
程序本身所消耗的时间
系统调用所消耗的时间

lseek函数的使用:
off_t lseek(int fd, off_t offset, int whence);
成功:返回新的文件位置与文件头之间的偏移
失败:返回-1
示例:从一个文件偏移100处,拷贝100字节到另一个文件。
#include #include #include #include #include #include #include #include #define FILE1_NAME "lseek_test.c"#define FILE2_NAME "lseek_test2.txt"#define SIZE 100int main(void) { int file1, file2; char buffer[1024]; int ret; file1 = open(FILE1_NAME, O_RDONLY); if (file1 != -1) { file2 = open(FILE2_NAME, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR); if (file2 != -1) { lseek(file1, 100, SEEK_SET); // 移动文件指针到偏移100处 ret = read(file1, buffer, SIZE); // 读取100字节 if (ret > 0) { buffer[ret] = '\0'; write(file2, buffer, SIZE); } close(file1); close(file2); } else { printf("无法打开文件%s,错误信息为:%s\n", FILE2_NAME, strerror(errno)); } } else { printf("无法打开文件%s,错误信息为:%s\n", FILE1_NAME, strerror(errno)); } return 0;}
ioctl函数的使用(嵌入式相关):
int ioctl(int fd, int cmd, [int *argdx, int argcx]);
fd是用户程序打开设备时使用open函数返回的文件标识符,cmd是用户程序对设备的控制命令,后面是一些补充参数,一般最多一个,这个参数的有无和cmd的意义相关。
以上就是【Linux】Linux文件的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/510479.html
微信扫一扫
支付宝扫一扫