设备和文件IO(Linux内核函数)

*设备和文件IO(Linux内核函数)*****

一、一些基础概念

什么是gdb,openssh

实现跨平台,要安装一些包gdb,openssh ;
在这里插入图片描述

openssh 是实现跨平台开发。

gdb:是通过打断点的方式进行调试,把工程文件生成在unbuntu下,并不是真正运行。

请添加图片描述

工程文件在Linux/home/projects下,在windows下面只有.cpp文件,而linux下会有bin文件夹(里面是执行文件)等。

请添加图片描述


如何新建项?

右键工程文件,添加新项,添加类的话是.cpp和.h一起。


注意事项

  1. 打印时要加endl;

  2. return的地方打上断点;

  3. 连接方式:NAT 主机虚拟机同网段ip,且主机的vmnet8要启动

  4. 验证登录的方式 ping

  5. ping不通的原因

    *不是同网段

    *主机防火墙未关

  6. include红线的原因

    ip连不上虚拟机

    虚拟机睡眠状态

    因为include导入的头文件是unbuntu下的,所以如果ip连不上,虚拟机睡眠,都会出现红线。

    解决方法:要在linux下,系统设置,设置亮度和锁屏,电源,然后重新连接unbuntu。

请添加图片描述
在这里插入图片描述

7.vs打印不了中文

​ 原因:因为主机和unbuntu下的操作系统编码不一致,安装UTF-8,重新启动vs2019。

​ 步骤:扩展 管理扩展 UTF-8

在这里插入图片描述

在这里插入图片描述安装第一个插件,安装后重启vs2019

二、文件系统调用

Linux设备管理:Linux采用文件系统管理硬件设备。

eg.屏幕 蓝牙 网卡 键盘等等都是硬件 在window下要安装驱动 但是在linux下,是文件方式管理硬件,所有东西都是文件方式进行存储。

库函数和系统函数区别:

在这里插入图片描述

由上图可得知,库函数需要一个语言开发环境(函数库),而内核函数不需要环境,直接调用系统自带的函数。所以可总结为:

可移植性效率
库函数
内核函数

查看内核函数的方法:

man xx or man 2 xx(具体哪个自行调试)

eg.

man write(NO)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4xtvH79j-1646968851466)(C:\Users\黄婷婷\AppData\Roaming\Typora\typora-user-images\image-20220310233012925.png)]

man 2 write
eg.出现Linux Programmer’s Manual就是查对了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z1SNzSFC-1646968851467)(C:\Users\黄婷婷\AppData\Roaming\Typora\typora-user-images\image-20220310233051168.png)]

常见的关于文件操作的函数:

函数名作用
close关闭文件
open打开文件
write
read

常用的打开方式:

打开方式功能
O_RDONLY只读
O_WRONLY只写
O_RDWR读写
O_CREAT创建
O_APPEND追加

拷贝文件实例:

#include <iostream>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
using  namespace std;
int main()
{

	int readfd = 0;//文件描述符fd
	//一定要赋初值,一定要初始化
	int wrifd = 0;//写
	int res1 = 0;
	int res2 = 0;
	char buf[50] = {0};
	umask(0);//设置umask为0000;
	readfd = open("/root/projects/1.txt",O_RDONLY,0777);//0777不一定成功,
    //umask,默认权限掩码0022,权限掩码减法,0777-0022=0755
	wrifd = open("/root/projects/copy1.txt", O_CREAT | O_WRONLY, 0777);
	if (readfd < 0 || wrifd <0)
	{
		perror("open file erro");//打印错误的方式
	}
	else
	{
		//参数:写哪个文件,写的内容,长度
		//const 不可以修改 void* 不知道存进来的内容
		//strlen 字符数 sizeof字节
		while ( (res1=read(readfd,buf,sizeof(buf))) >0)
		{
			cout << "res1是" << res1 << endl;
			res2 = write(wrifd, buf, res1);
			cout << "res2是" << res2 << endl;
			bzero(buf, sizeof(buf));

		}
		close(readfd);
		close(wrifd);

	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值