C/C++学习笔记——文件操作(一)

real :总耗时 = 用户态时间 + 内核态时间 + 等待时间
sys 内核态时间
user 用户态时间
系统调用的过程

文件

文件系统

数据结构 文件在磁盘上的储存形式
算法 访问磁盘文件中数据的方法
UFS Unix File System
在这里插入图片描述

磁盘驱动器 :分区(逻辑区)
目录文件中保存的就是其中每个文件及子目录的名字(字符串)和i节点号(整数)对应表,其中每一个条目就叫一个硬链接。

2.文件类型:保存在每个文件的i节点的元数据中,以及该文件的目录条目中。
1.普通文件(-):文档、代码、可执行程序、脚本、音视频、配置信息等;
2.目录文件(d):其内容包含其下所有条目的硬链接(. 当前目录;… 上级目录);
3.符号链接文件(l):其内容是另一文件的路径;
/abc/def -> 18000
硬链接(ln)
/ghi/jkl -> 18000
/mno/opr -> 19000 -> 内容:/abc/def - 符号链接(ln -s)
4.字符设备文件 (c)以字节为单位顺序读写如键盘、串口;
5.块设备文件(b)以若干字节组成的数据块为单位读写,如硬盘、打印机;
6.管道文件§:SVR4引入的进程间通信对象;
7.本地套接字文件(s):BSD引入的进程间通信对象。

系统函数

1.文件的打开与关闭
#include<fcntl.h>
int open(char const* pathname ,int flags,mode_t mode);
成功返回文件路径,失败返回-1。
pathname :文件路径名;
flags:状态标志

  1. O_RDONLY 只读
  2. O_WRONLY 只写
  3. O_RWDR 读写
  4. O_APPEND 追加
  5. O_CREAT 不存在即创建,已存在即打开
  6. O_EXCL 不存在即创建,已存在即报错
  7. O_TRUNC 不存在即创建,已存在即清空
    mode :对新创建的文件设置权限 :0UGO,其中每一位均有4、2和1的组合,分别表示读写执行权限
    0644
    0751
    文件打开
    文件操作
/*
	date 2020-07-18
	name 文件打开关闭操作
	version 1.0
*/
#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>
int main(void) {
	int fd1 = open("open.txt",O_RDWR | O_CREAT | O_TRUNC,0666);
	if(fd1 == 1) {
		perror("open");
		return -1;
	}
	printf("fd1:%d\n",fd1);
	int fd2 = open("open.txt",O_RDONLY);
	if(fd2 == -1) {
		perror("open");
		return -1;
	}
	printf("fd2:%d\n",fd2);
	colse(fd1);
	colse(fd2);
	return 0;
}
  • 每个进程一经启动就会默认打开三个文件:标准输入(键盘设备)、标准输出(终端设备)和标准错误(终端窗口),分别占用文件描述符0、1和2。
  • 文件描述符是一个小整数,每次使用最小的空闲项,作为文件新增条目文件的实际权限除了与mode参数有关还与调用进程的umask属性有关:
    实际权限 = mode & ~umask = 0666 & 0222 = 0664

FILE* fp = fopen(“open.txt,O_RDONLY”);

colse(fd);

#include<stdio.h>
typedef struct _IO_FILE FILE;

#include<stdio.h>
struct _IO_FILE {

int _fileno; //文件描述符

};
shell的I/O重定向

./redir 0<i.txt 1>o.txt 2>e.txt
/*
	date 2020-07-18
	name I/O重定向 redir.c 
	versin 1.0
*/
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<unistd.h>
//增加
void redir(void) {
//close (0);
close(STDIN_FILENO);
open("i.txt",ORDONLY);
//close(1);
close(STDOUT_FILENO);
open("o.txt",O_WRONLY | O_CREAT | O_TRUNC,0644);
//close(2);
close(STDERR_FILENO);
open("e.txt",O_WRONLY | O_CREAT | O_TRUNC,0644);
}
void doio(void) {
	int x,y;
	scanf("%d%d",&x,&y);
	printf("%d+%d=%d",x,y,x+y);
	malloc(0xFFFFFFFFFFFFFFFFFFFFFFFF);
	perror(malloc);
}
int main(void) {
 redir();
 doio();
 return 0;
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值