软件包管理器

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