Linux系统调用IO

/欢迎大家批评指正/

Linux 系统调用IO
打开文件:
int open(const char* pathname,int flags);
int open(const char *pathname,int flags,mode_t mode);
参数一:文件路径
参数二:打开权限
三选一:
O_RDONLY, 只读
O_WRONLY, 只写
O_RDWR 读写
可选可不选:
O_CREAT, 如果不存在则创建
O_EXCL,如果O_CREAT也被设置,此指令会检查文件是否存在。不存在则创建,否则打开错误
若O_CREAT与O_EXCL同时设置,并且预打开的文件为符号连接,则会打开文件失败
> 符号连接也称为软连接 详解见https://blog.csdn.net/KaiLoveM/article/details/79169080
O_NOCTTY,如果欲打开的文件问终端机设备时,则不会将该终端机当成进程控制终端机。
O_TRUNC:把文件的长度变为0,相当于清空文件,必须要有写的权限(O_WRONLY或O_RDWR)
O_APPEND,以附加方式加入到文件后面
O_NOFOLLOW 如果参数pathname所指的文件为一符号连接,则会令文件打开失败
O_DIRECTORY 如果所指的文件并非为一个目录,则会令文件打开失败
参数三:若创建文件给予的权限,八进制数
rwx :读1,写2,执行4 相加
格式:特殊权限 user权限 group权限 other权限
如 : 0 7 7 7 全部人都是可读可写可执行
返回值:
成功:文件描述符fd 注:用户申请文件描述符从3开始,
0 - 2系统占用(0标准输入stdin,1标准输出stdout,2标准出错stderr)
失败:-1

读文件
ssize_t read(int fd,void* buf,size_t count)
参数一: int ----- open的返回值
参数二: void * ---- 用来存放读取数据的内存的首地址
参数三:size_t 读取内容大小,单位:字节
返回值:
成功:>0 读取的字节数
=0 文件末尾
失败:-1

写文件
ssize_t write(int fd, const void *buf, size_t count)
参数一:open的返回值
参数二: 要写入数据的内存的首地址
参数三: 写入内容大小,单位:字节
返回值:
成功:>0 写入的字节数
=0 文件末尾
失败:-1

关闭文件
close(int fildes)
参数:open返回值,文件描述符
返回值
成功:0
失败:-1

练习:使用系统调用IO实现文件的拷贝

int main()
{
	int readfd, writefd;
	readfd = open("./file.c", O_RDONLY);//只读打开原文件
	if(readfd == -1)
	{
		printf("open file fail\n");
	}else
	{
		printf("open file success\n");
	}
	
	writefd = open("./newfile.c", O_RDONLY | O_CREAT);//创建新文件
	if(readfd == -1)
	{
		printf("open newfile fail\n");
	}else
	{
		printf("open newfile success\n");
	}

	int size = 0;
	char buf[20] = {0}
	while(size = read(readfd, buf, 15) )//读到文件末尾结束循环
	{
		write(writefd, buf, size);
		bzero(buf, 20);//数组清零
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43657281/article/details/83930702