嵌入式Linux网络编程·笔记1·Linux C 文件编程0 h! `6 |7 S+ ^! z' V: p, l; l
Linux C 文件编程 – Linux I/O编程% Q' X0 o$ N) _- C+ K6 z& l
& j& {% X# Y v( p/ w" b; f
1.为什么称为I/O编程? Linux一点哲学:一切皆为文件。8 ]; y! Z% w/ A+ i: t% b5 x# _
7 d1 c' ~1 y. [7 N7 w0 R( w
2.硬件设备也被抽象为文件:对硬件的操作=对硬件I/O操作=对文件的操作。 0 l, y* K; o( D- x / e0 D& v4 A. T9 n3.Linux为什么会选择把所有资源抽象成文件?4 v/ n4 W; ~3 ]& I6 v3 r6 u/ g: d
7 i5 g z/ }: c4 h( O6 K [" a
1)文件本质就是字符流 – 二进制;# j% W( Y6 D# {6 J. _
: A; n& j& x) M# g s. c2 E+ R
2)文件的操作比较简单:打开、读、写、关闭、设置文件的属性(w/r/a/+);- Q5 K2 Y* x2 {- F; N0 n% _) z4 ]
V, d! k: S' z: a
3)文件系统已较为成熟。 @+ M) K% ^% @" V2 X8 b
: y# G5 }- L& z; ]9 f2 l
4. C语言VS Linux文件操作(二者区别 – 是否有操作系统)& S/ o( a, t& ?- c6 ~/ r
) U8 b1 @) H% Y9 {: n
C语言:fopen、fread、fwrite、fclose、fseek;- H$ l* U3 c! F8 X( y) H7 [# v
( P0 [0 P! u0 c/ E6 W9 q6 F Linux:open、read、write、close、seek。% X- {6 p. v7 R- g7 r. u
, x4 L8 ^4 ~0 @5.Linux文件的类型:目录、普通、设备、链接、管道、堆栈、共享文件。 # e5 G. r x$ f# E* B8 [1 b2 ~6 f8 Z- `# Q/ G( B4 y
6.在Linux下如何操作一个文件?. H4 Y9 R5 @! @( \9 z0 `( N, H
. C# ]' a" v/ }7 `6 s8 [6 |) j0 s3 M/ [+ G 1) 文件描述符作用:已知文件的文件描述符,操作该文件描述符就相当于操作该文件;0 u# d( m ]/ V4 H* a3 I# m
8 P" w# w7 `* y
2)文件id:无符号的整型 – unsigned int fd;- g% a. B0 t; ]# i3 m0 C8 G
8 o$ N; T5 [6 |% W) V2 h
3)文件id的限制:unsigned int – 有取值范围;- ]& V* e2 B. \& i0 p
: ?- f+ E8 j2 r0 E& d 4)用户自己创建的文件从“3”编号开始。 : |: J; O2 }: M$ ~3 K. `7 K# R# H, V- @5 Y( G' N9 G* |2 O
(注)在Linux系统中,0、1、2这三个文件id有特殊作用, 0代表的是标准输入;1代表的是标准输出;2代表的是标准出错。* D9 _: X6 V J. b
: w* ]( W4 _7 e& q* h y e/ R
7.什么时候文件会有自己的id?. }* s- W) ~$ d. }; C1 f, V. t
& E: S H1 b: G9 @6 O1 |* Q 动态分配,当操作一个文件时,操作系统才会给你这个文件的id。 / Z5 @1 N, r9 d
' Z( c8 r) _! `
总结:+ b5 ?* [# c! o. k: G4 K4 e! T
嵌入式网络编程 == 嵌入式Linux C系统编程(文件、进程、进程间通信、多线程、网络、大并发网络服务器、数据库、shell编程 9 K+ n8 n" `, C, ?- a嵌入式C开发 VS 嵌入式Linux C:使用Linux操作系统提供的功能(文件等)(多任务、网络聊天室)嵌入式Linux应用软件开发: g- @4 B, [% a9 v. C8 ^
Linux操作系统的组成:用户空间、内核空间 # s* H% z, S% _% f为什么将Linux操作系统划分为用户空间和内核空间:保护内核不被用户轻易访问$ a5 w8 i2 B8 w1 @3 P
用户空间如何访问内核空间?系统调用、中断(硬件中断、软件中断) 5 R& p* M/ e) J什么是系统调用?用户通过调用操作系统提供的函数(发生系统调用)来访问内核的数据或者获取服务 ) g" ^% N. \* W2 e7 y7 d9 V用户如何发生系统调用?调用系统提供的API) p# ~$ N4 |, `; u$ |1 F1 n
API:用户编程接口 == 操作系统提供的可调用函数 (create\open\read\write\close\lseek\fcnl\ioctl\mmap)( ` T5 u, z: {- Y% C, X# c/ @
如何学习嵌入式网络编程?写(代码)、测试(写demo测试API接口的功能)、项目(知识点整合) 1 m2 u/ ]& p* q" A3 E7 @1 f学习方法:头文件、函数名、函数内每个形参作用、函数返回值 & @. G4 ]4 {* o- ^8 W$ Q! h 5 y& D1 x6 @, o5 f+ R7 [; q) ]9 Q+ g' W% p: Q! y8 [4 z
+ ~! G t1 k6 V4 ?0 n