先说结论,结论是不会
我写了一个这样的程序
#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 本身并不会给文件加锁