我们在 Linux 环境中用 C 编程时,如果对文件读写,Linux 会自动给文件加锁嘛?

编程入门 行业动态 更新时间:2024-10-28 22:23:49

我们在 Linux 环境中用 C 编程时,如果对<a href=https://www.elefans.com/category/jswz/34/1771438.html style=文件读写,Linux 会自动给文件加锁嘛?"/>

我们在 Linux 环境中用 C 编程时,如果对文件读写,Linux 会自动给文件加锁嘛?

先说结论,结论是不会

我写了一个这样的程序

#include <stdio.h>
#include <unistd.h>int main() {const char* pathname = "your_file_pathname.txt";FILE* file = NULL;int count = 100;if(access(pathname, F_OK) == 0) {file = fopen(pathname, "r+"); printf("open in r+ mode\n");}else {file = fopen(pathname, "w+"); printf("open in w+ mode\n");}if (file == NULL) {printf("无法打开文件\n");return 1;}fseek(file, 0, SEEK_END); // 将文件指针移动到文件末尾long file_size = ftell(file); // 获取文件大小if (file_size == 0) {fprintf(file, "0\n"); // 文件为空,写入0fflush(file); // 刷新文件缓冲区,确保写入文件}fseek(file, 0, SEEK_SET); // 将文件指针移动到文件开头int num;fscanf(file, "%d", &num); // 读取文件中的整数printf("num = %d\n", num);sleep(2);while(count--) {num++; // 将整数加1fseek(file, 0, SEEK_SET); // 将文件指针移动到文件开头fprintf(file, "%d\n", num); // 将更新后的整数写回文件fflush(file); // 刷新文件缓冲区,确保写入文件fseek(file, 0, SEEK_SET); // 将文件指针移动到文件开头fscanf(file, "%d", &num); // 读取文件中的整数printf("num = %d\n", num);sleep(2);}fclose(file); // 关闭文件return 0;
}

上面这个程序会读取文件中的数字,然后给数字+1,再写回文件

这个程序里没有给文件加锁,我同时运行了 8 个这样的程序,最后的 result file 里的数字是 127,而非 800,说明 Linux 本身并不会给文件加锁

更多推荐

我们在 Linux 环境中用 C 编程时,如果对文件读写,Linux 会自动给文件加锁嘛?

本文发布于:2023-12-03 21:08:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1657664.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:文件   中用   加锁   环境   Linux

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!