Linux C flie操作: open write read lseek close函数分析

函数类型:open、 write、 read、 lseek、 close函数属于文件的系统调用。

包含有文件:<sys/stat.h>,<sys/types.h>,<fcntl.h>

文件描述符:实质就是一个整数,当做是文件的ID,在系统中唯一标识文件。对文件read、write、lseek、close操作时就会用到文件描述符。系统开始运行时,一般会有三个已经打开的文件描述符:

  • 0:标准输入
  • 1:标准输出
  • 2:标准错误

1,open函数

Linux中open的函数原型有两个:

int open(const char *path, int oflags);

int open(const char *path, int oflags, mode_t mode );

参数说明。

@path:准备打开的文件或设备名字。如:path="/home/work/text.txt"

@oflags:指出要打开文件的访问模式,三种访问模式如下:

          O_RDONLY: 只读方式

Linux环境下,使用标准I/O库(如stdio.h)和相关的系统调用实现一个简单的学生管理系统,每个学生对应一个单独的文件,文件名由学号加".data"组成。这里提供一个基本的伪代码示例,展示了如何操作: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_NAME_LEN 50 #define FILENAME_FORMAT "%d.data" // 定义学生结构体 typedef struct { char name[MAX_NAME_LEN]; int id; } Student; void create_file(int id) { char filename[PATH_MAX]; snprintf(filename, sizeof(filename), FILENAME_FORMAT, id); FILE *file = fopen(filename, "w"); if (file == NULL) { perror("Failed to open file"); exit(EXIT_FAILURE); } fclose(file); } void write_student(int id, const char *name) { char filename[PATH_MAX]; snprintf(filename, sizeof(filename), FILENAME_FORMAT, id); FILE *file = fopen(filename, "a"); if (file == NULL) { perror("Failed to open file for writing"); exit(EXIT_FAILURE); } fprintf(file, "Student ID: %d\nName: %s\n", id, name); fclose(file); } Student read_student(int id) { char filename[PATH_MAX]; snprintf(filename, sizeof(filename), FILENAME_FORMAT, id); FILE *file = fopen(filename, "r"); if (file == NULL) { printf("No student found with ID: %d\n", id); return {NULL, 0}; } // 读取学生信息并初始化结构体 rewind(file); // 移动到文件开头 fscanf(file, "Student ID: %d\nName: %s", &id, name); fclose(file); return {name, id}; } int main() { Student new_student = {"张三", 1001}; create_file(new_student.id); write_student(new_student.id, new_student.name); Student existing_student = read_student(1001); if (existing_student.id > 0) { printf("Found student: %s\n", existing_student.name); } else { printf("No student found with ID: %d\n", existing_student.id); } return 0; } ``` 这个例子创建了一个新的文件、写入学生信息,并从文件中读取信息。需要注意的是,实际应用中可能会需要处理异常情况,例如检查文件打开失败等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值