Linux C 语言文件 IO 与构建工具实战指南
软件包管理器Linux下使用vscode进行代码编写makefilesudo apt install -y build-essential使用这个进行安装。其使用格式如下CC:gcc fopen_test: fopen_test.c -$(CC) -o $ $^ -./$ -rm ./$文件IO打开/关闭文件#includestdio.h int main() { FILE* ioFile fopen(a.txt,w); if(ioFile NULL) { printf(打开错误\n); } else { printf(打开成功\n); } int ret fclose(ioFile); if(ret EOF) { printf(关闭文件失败\n); } else if(ret 0) { printf(关闭文件成功); } return 0; }向文件写入数据#includestdio.h int main() { FILE* ioFile fopen(a.txt,a); if(ioFile NULL) { printf(打开错误\n); } else { printf(打开成功\n); } fputc(a,ioFile); fputs(i am real\n,ioFile); char arr[] 云山; fprintf(ioFile,大风手印%s\n,arr); int ret fclose(ioFile); if(ret EOF) { printf(关闭文件失败\n); } else if(ret 0) { printf(关闭文件成功); } return 0; }从文件读取数据#include stdio.h int main() { FILE *ioFile fopen(a.txt, r); if (ioFile NULL) { printf(打开错误\n); } else { printf(打开成功\n); } // char get fgetc(ioFile); // while(get ! EOF) // { // printf(%c,get); // get fgetc(ioFile); // } // printf(\n); // char arr[128]; // while(fgets(arr, sizeof(arr), ioFile)) // { // printf(%s,arr); // } // printf(\n); char arr[128]; while(fscanf(ioFile, %s, arr) 1) { printf(%s\n, arr); } printf(\n); int ret fclose(ioFile); if (ret EOF) { printf(关闭文件失败\n); } else if (ret 0) { printf(关闭文件成功); } return 0; }标准输入/输出/错误#includestdio.h #includestdlib.h int main() { char *ch (char*)malloc(sizeof(char)*100); fgets(ch,100,stdin); fputs(ch,stdout); return 0; }系统调用#includeunistd.h #includefcntl.h #includestdio.h int main() { int ret open(a.txt,O_RDONLY|O_CREAT|O_WRONLY,0664); if(ret -1) { printf(打开文件失败\n); } char arr[32]; read(ret,arr,sizeof(arr)); printf(%s,arr); return 0; } #includeunistd.h #includefcntl.h #includestdio.h #includestdlib.h int main() { int fd open(a.txt,O_RDONLY); if(fd -1) { printf(打开文件失败\n); exit(EXIT_FAILURE); } char buffer[256]; ssize_t bytes 0; while((bytes read(fd,buffer,sizeof(buffer))) 0) { write(STDOUT_FILENO, buffer, bytes); } printf(\n); if(bytes -1) { printf(打印失败\n); close(fd); exit(EXIT_FAILURE); } return 0; }文件描述符当打开一个文件会得到一个句柄里面的信息就与文件物理进行相互关联来保证我们对文件进行操作。0是标准输入stdin的文件描述符1是标准输出stdout的文件描述符2是标准错误stderr的文件描述符。struct file { ...... atomic_long_t f_count; // 引用计数管理文件对象的生命周期 struct mutex f_pos_lock; // 保护文件位置的互斥锁 loff_t f_pos; // 当前文件位置读写位置 ...... struct path f_path; // 记录文件路径 struct inode *f_inode; // 指向与文件相关联的inode对象的指针该对象用于维护文件元数据如文件类型、访问权限等 const struct file_operations *f_op; // 指向文件操作函数表的指针定义了文件支持的操作如读、写、锁定等 ...... void *private_data; // 存储特定驱动或模块的私有数据 ...... } __randomize_layout __attribute__((aligned(4)));