Linux下IO的系统调用接口 文件流指针 文件描述符 文件重定向
Linux下ext2文件系统 inode节点 软链接/硬链接 动态库和静态库的生成
1.系统调用接口: open、close、write、read、lseek
库函数和系统调用函数的关系:上下级的调用关系
int open(const char* pathname, int flags, mode_t mode);
pathname : 文件名称
flags: 选项标志
必选项:O_RDONLY只读 O_WRONLY只写 O_RDWR读写
可选项:O_CREAT:若文件不存在则创建,存在则打开
O_EXCL:搭配O_CREAT使用,若文件存在则报错返回
O_APPEND:追加写
代码演示库函数:
/*c库中的io接口
* fopen fclose fwrite fread fseek
*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
int main()
{
//mode: r r+ w w+ a a+
//r:只读 r+:读写
//w:只写 w+:读写 若文件不存在则创建,若问阿金存在则清空内容
//a:写追加 a+:读写打开,追加写,从起始位置读,文件不存在则创建
FILE* fp = fopen("./test.txt", "w+");
if(fp == NULL){
printf("fopen error]n");
return-1;
}
char* ptr = "hello bit!!\n";
//size_t fwrite(void* ptr, size_t size, size_t nmemb, FILE* stream);
fseek(fp, 5, SEEK_END);
if(fwrite(ptr, 1, strlen(ptr), fp) != strlen(ptr)){
printf("fwirte error\n");
}
//int fseek(FILE* stream, long offset, int whence);
//whence:
//SEEK_SET 文件起始位置
//SEEK_CUR 文件读写位置
//SEEK_END 文件末尾位置
fseek(fp, 0, SEEK_SET);
//size_t fread(void* ptr, size_t size, size_t nmmeb, FILE* stream);
char buf[1024] = { 0 };
int ret = fread(buf, 1, 1024-1, fp);
if(ret < 0){
printf("read error");
}
printf("ret:%d buf:%s\n", ret, buf);
fclose(fp);
return 0;
}
代码演示系统调用接口:
/*演示基础io系统调用接口demo
* open close read write lseek
*/
#include <stdio.h