Crazy迷恋. 发表于 2014-11-20 16:17:49

Linux系统编程之文件IO 一

本帖最后由 Crazy迷恋. 于 2014-11-20 23:11 编辑

   前言
   引用小生到一句话,距离上次发帖是啥时候来着?时间真快啊!刚学完linux 系统编程,趁着没有忘记赶紧整理整理,所有我就想写一个linux 系统编程的帖子,分享给大家。这个系列的内容主要还是以整理为主,内容按照我自己学习的顺序开始写,主要参考我们学校的一个老师写的教材,在这里我会比较多到引用他教材中到内容,也会写一些自己到理解,纯当心得笔记之类的,如果有写到不好到地方还请谅解。
   好了废话不多说,既然是linux 系统编程,那么如果需要学习的哥们就必需要有这个系统,现在到虚拟技术做到也成熟,vm ,visual box之类到装个虚拟机就搞定了。不过这些应该也不需要我多说了。应为能看懂linux 系统编程到人,至少需要熟悉C语言基础。linux/unix基本命令,以及一些基本到操作系统常识。
   环境:
   我到操作系 Kali Linux 1.0.9 64 位
   内核 Linux 3.14-kali1-amd64
   GNOME 3.4.2
   8G 内存
   CPU   i5-2450
   编译器:gcc version 4.7.2 (Debian 4.7.2-5)
   编辑器Vim

C语言标准库与系统函数的区别
    大家都清楚,不管是 windows 还是linux /unix 用C语言打印一句话hello world都是通过printf当然你也可以用sprintf 只要打到stdout那么就会显示出来(当然也有缓冲区没刷新到情况)。那么我们讨论区别就要从最初级到hello wordl 讨论起。 其实我们打打hello world 到时候都是打到了 stdout 里去了。stdout stdin stderr,都是一个文件指针,在C标准头文件中已经定义好到。我们可以直接使用。那么问题来了。挖掘。。。。。
    那么这些文件指针又指向了哪里?恩~貌似有点跑题了 这个问题我们接下来讨论
    我们到重点是在研究标准库和系统函数的区别,其实printf 是向下调用的,printf ,putchar fputs 等等。都是会调用到系统函数write。我们都知道我们打印到屏幕上也就是一个硬件上,硬件都是由操作系统来管理到。操作系统通过各种驱动程序来沟通这些硬件,我们要向屏幕打印hello world那是不是意味着我们要向硬件发信息呢?对的。wirte 会继续向下调用。因为write 是一个R3 层的 函数(注:Intel的x86处理器是通过Ring级别来进行访问控制的,级别共分4层,从Ring0到Ring3(后面简称R0、R1、R2、R3)。R0层拥有最高的权限,R3层拥有最低的权限。但windonws 和linux/ unix 都只是使用了r0和r3 两个级别,这类函数是进入不到内核的,通俗到说是3G-4G,(注:以32位操作系统为例子,每个程序都会有1-4G到虚拟内存空间内核会被映射到3-4G这段空间内)。我们要沟通一个硬件就必须进入到内核去,所有write 会进行system call 系统调用是一种软中断,它会从r3 进入到r0 据说都是用汇编写到 对于更底层到东西我就不清楚了。有兴趣到朋友可以一继续向下研究。
   我觉得到这里应该很清晰了C标准库调用->系统库->系统调用进入内核。
   所以 系统函数效率要高。printf 和write 这种类型函数相比
   在这里 盗用老师到一张图:


**** Hidden Message *****

man write 默认到是 第一章 第一章是系统命令,第二章是系统函数,所有man 2 write查到到函数才是对到。
这个函数到用法就以后再谈吧。因为这个函数第一个参数是一个 文件描述符,第二第三就不用多说了,文件描述符这个东西还是留给后边再议论。
输入法用到有点蛋疼,各位见谅。






Angel丶L 发表于 2014-11-20 18:41:47

支持了

拈花小仙 发表于 2014-11-20 18:54:45

评分不够用了,恋恋的帖是必须顶的~

坏乖乖 发表于 2014-11-20 19:20:00

看                                                                                       

Crazy迷恋. 发表于 2014-11-20 19:59:32

Angel丶L 发表于 2014-11-20 18:41
支持了

3Q~~{:5_110:}

Crazy迷恋. 发表于 2014-11-20 20:00:04

拈花小仙 发表于 2014-11-20 18:54
评分不够用了,恋恋的帖是必须顶的~

{:5_92:}{:5_92:}{:5_92:}

XXZH123 发表于 2014-11-20 20:14:29

dddddddddddddddddddddddddddddddddddddddddddddddd

拈花小仙 发表于 2014-11-20 20:38:53

Crazy迷恋. 发表于 2014-11-20 20:00


唉,每日评分要没上限就好了。恋恋,振兴鱼C还要靠你呢。回来和我们一起哦~

bestboyhjj 发表于 2014-11-24 10:01:36

振兴鱼C还要靠你呢

华彩篇章 发表于 2014-11-24 11:37:37

真号需要

华彩篇章 发表于 2014-11-24 11:39:55

Crazy迷恋. 发表于 2014-11-20 20:00


楼主你看的是什么教程,能推荐一下么,谢谢了

破灬王 发表于 2014-11-24 12:06:18

顶一个,为了系统而奋斗

Crazy迷恋. 发表于 2014-11-25 21:32:09

华彩篇章 发表于 2014-11-24 11:39
楼主你看的是什么教程,能推荐一下么,谢谢了

可以使用传智到视频,但别去培训,因为坑!!!

Beard 发表于 2014-11-27 15:27:40

吸取lz经验

计机羊咩咩 发表于 2014-11-27 18:03:22

赞一个

z294354069 发表于 2014-11-28 10:12:20

good

yuc_1000 发表于 2016-11-11 21:56:08

{:5_107:}{:5_107:}{:5_107:}{:5_107:}{:5_107:}{:5_107:}{:5_107:}{:5_107:}{:5_107:}{:5_107:}{:5_107:}{:5_107:}

摆烂跳跳虎 发表于 2024-3-26 21:44:56

{:5_109:}
页: [1]
查看完整版本: Linux系统编程之文件IO 一