软件包管理器
Linux下使用vscode进行代码编写
makefile
sudo apt install -y build-essential使用这个进行安装。其使用格式如下
CC:=gcc fopen_test: fopen_test.c -$(CC) -o $@ $^ -./$@ -rm ./$@文件IO
打开/关闭文件
#include<stdio.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; }向文件写入数据
#include<stdio.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; }标准输入/输出/错误
#include<stdio.h> #include<stdlib.h> int main() { char *ch = (char*)malloc(sizeof(char)*100); fgets(ch,100,stdin); fputs(ch,stdout); return 0; }系统调用
#include<unistd.h> #include<fcntl.h> #include<stdio.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; } #include<unistd.h> #include<fcntl.h> #include<stdio.h> #include<stdlib.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)));