Linux:C/C++文件操作

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

回忆C语言文件操作

  1. fopen()的使用
      答打开文件流指针。
    param2 = “w”当前没有文件就先创建再写入。
    “r”只读。
    “b”可与w、b组合。
  • 只写的例子
    请添加图片描述
    请添加图片描述
  • 只读的例子
    依靠fgets()还要借助buffer最后还要判断文件是否有读出错如果读出错fgets也是0。
    请添加图片描述
    请添加图片描述
  • 追加的例子param2a
    请添加图片描述
    以a的形式追加cat到txt内容更多。
    请添加图片描述
    如果mode=w就会覆盖把之前有的也删掉
  1. fputs()
      答向特定文件写入。会打开默认的三个文件流。

  2. fgets()
      答读取专用需要借助缓冲区在第二个参数上给size。
    如1中读文件的例子给fgets(buffer, buffer_size, file_p)

  3. C语言文件操作fputs默认打开的输出流
      答fputs()会打开stdin、stdout、stderr。这三个流本质是FILE*。
    对应设备
    stdin键盘
    stdout显示器
    stderr显示器
    而C++会打开cin、cout、cerr。

  4. 实验 测试流stdout对应的是显示器
    观察如下代码如果fputs默认打开三个文件流那么stdout对应设备显示器应该打开了。所以给stdout写入msg会在显示器上直接输出。
    请添加图片描述
    请添加图片描述
    至此验证了通过stdout直接向显示器写入。
    总之虽然编程语言可能会和和OS、驱动等交互但是本质其实是想对硬件做出操作所以语言上对“文件”的操作如函数fopen、fclose、fread、fwritefputs、fgets等都必须贯穿操作系统。
    请添加图片描述

C++文件操作

  • 写入实例
    ofstreamstd::ios::out没有文件生成空文件。有则覆盖。
    请添加图片描述
      结果
    请添加图片描述

WRONLY写方式打开O_CREAT文件不存在就创建。此外0644是权限参数如果不加会导致权限混乱如下
请添加图片描述

  1. 编写C语言文件。
    请添加图片描述
  • 关于open()
    param2flags是标志位。有32位如上第二行有两个标志位。可以用|方式传递多个。你传入参后底层会做&操作。如上的O_WRONLY、O_CREAT都是只有一个比特位是1的数据且不重复。
    每个值转为二进制都只有一个bit位是1。所以两个值或一下让两个位置是11所以和传入参做&就可以得到真实想要的值。
  • 一条装杯的可查看系统源文件中这些标志值真实大小的命令
grep -ER 'O_CREATE|O_RDONLY' /usr/include/

grep -E是过滤寻找R是递归查找。
请添加图片描述
接下来去如上图中的/usr/include/asm-generic/fcntl.h
然后通过vim 编辑这个文件再在命令行上./RDONLY查看发现了是全0和全1。
请添加图片描述

  1. 运行后查看log权限。 正常了请添加图片描述
  • open()的返回值有返回值。如下1输出3。3正常-1是打开失败。
    请添加图片描述
    请添加图片描述

  • 承上0、1、2去哪儿了
      答其实是0标准输入键盘1标准输出显示器2标准错误显示器。
    请添加图片描述

  • 系统打开文件的本质
      答所有文件操作本质都是进程执行对应的函数、进程对文件操作、操作文件必须先打开文件。将文件相关属性信息加载到内存。一个进程可以打开多个文件。

  • 进程会打开很多文件操作系统必须管理打开的文件如何管理呢
      答先描述再组织。这里有一个数据结构file保护了打开文件的相关属性、链接属性。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linuxc++