- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40252 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12787
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
嵌入式Linux网络编程·笔记1·Linux C 文件编程
0 _, g8 o% B' R- r7 N# c b4 p4 CLinux C 文件编程 – Linux I/O编程: M d# |5 @6 R5 k8 H
, j' J E3 p* |9 _; @1.为什么称为I/O编程? Linux一点哲学:一切皆为文件。+ m! v: b2 A2 U! Q( H
5 g( H2 _# i) W0 K
2.硬件设备也被抽象为文件:对硬件的操作=对硬件I/O操作=对文件的操作。( ]6 {0 W) b o8 Y. ?) N
. [8 U1 H5 u- S- `$ d2 r5 {3.Linux为什么会选择把所有资源抽象成文件?
& d5 P& H7 L" \) S: A V9 E' F, `
' ~) c4 `. p' ^& V9 K$ x 1)文件本质就是字符流 – 二进制;3 ?$ T; m7 ^% _9 H9 k$ \
3 t+ S" O; U+ }
2)文件的操作比较简单:打开、读、写、关闭、设置文件的属性(w/r/a/+);2 ^+ J) {: e" V" t' w
6 K m$ T/ [- F% Z 3)文件系统已较为成熟。$ s- a; a2 y8 N- s
* b) U1 M* G$ R; f( g5 B- x! L- B6 ^% k
4. C语言VS Linux文件操作(二者区别 – 是否有操作系统)- j* t5 D7 I6 U. Q) Y1 f
/ z; {" [; t# D" v' H
C语言:fopen、fread、fwrite、fclose、fseek;
3 R6 x& R' _$ k7 f! ]. e" Z6 Z
$ H. H6 |0 c, @, S, U& i Linux:open、read、write、close、seek。
: N, [* D1 v( Q" C% L5 R! R$ B/ i* o: `( h4 f$ l2 y
5.Linux文件的类型:目录、普通、设备、链接、管道、堆栈、共享文件。$ L9 m7 [9 S4 W
) h6 f9 O, m( y6.在Linux下如何操作一个文件?
" }3 Q) v7 e+ b. t7 b" n8 B) o' g: l' S# h1 z9 z3 {; d
1) 文件描述符作用:已知文件的文件描述符,操作该文件描述符就相当于操作该文件;& w& I* j9 n: a0 L' \& ~" x
7 l+ o+ ~0 K* G' ^: W* j! |1 X
2)文件id:无符号的整型 – unsigned int fd;6 R+ w- o; F* E; U/ i
6 y4 ~* T7 F* n" @3 |$ a 3)文件id的限制:unsigned int – 有取值范围;
G q y. t6 S( m% t( u( f1 \& q& `0 l+ b/ i/ H7 }# N
4)用户自己创建的文件从“3”编号开始。
5 X% }8 z D2 P% n9 l& f3 Y A' |% T! ]; a6 o; i- N- p
(注)在Linux系统中,0、1、2这三个文件id有特殊作用, 0代表的是标准输入;1代表的是标准输出;2代表的是标准出错。
! T9 i4 u8 X' z( E k u8 x( G0 Z- i9 V3 J* f. c
7.什么时候文件会有自己的id?
2 P9 X5 a; R& b$ I9 I
3 n2 `1 X6 I4 m+ M4 S) T3 n: v: k; { 动态分配,当操作一个文件时,操作系统才会给你这个文件的id。
2 I& S% t% F, o0 _/ P# j2 E6 I" O+ ^+ e. [- l, Y4 H
总结:
1 O2 N5 \7 B G嵌入式网络编程 == 嵌入式Linux C系统编程(文件、进程、进程间通信、多线程、网络、大并发网络服务器、数据库、shell编程
% e$ }+ ?$ J! W+ x- y0 j" K嵌入式C开发 VS 嵌入式Linux C:使用Linux操作系统提供的功能(文件等)(多任务、网络聊天室)嵌入式Linux应用软件开发
+ X& N! k$ P& ?' Z: C+ A; c6 cLinux操作系统的组成:用户空间、内核空间
6 E1 L! ^7 T) I1 H为什么将Linux操作系统划分为用户空间和内核空间:保护内核不被用户轻易访问
+ ], B- b1 L. r. ~. I8 F用户空间如何访问内核空间?系统调用、中断(硬件中断、软件中断)' q! |3 V' _! U. ?" p0 ^ k
什么是系统调用?用户通过调用操作系统提供的函数(发生系统调用)来访问内核的数据或者获取服务% ]7 ^/ r0 r( w4 n7 \) V# ]
用户如何发生系统调用?调用系统提供的API2 D/ b1 s$ A, z
API:用户编程接口 == 操作系统提供的可调用函数 (create\open\read\write\close\lseek\fcnl\ioctl\mmap)$ t* r- w0 N5 `, m
如何学习嵌入式网络编程?写(代码)、测试(写demo测试API接口的功能)、项目(知识点整合)
( V; q5 m9 C4 ]" c/ O' m学习方法:头文件、函数名、函数内每个形参作用、函数返回值1 j; W/ d; Y. }+ d
. w. C. p8 y* [3 B. P$ p+ g$ y! m6 r S
# `1 \% r( d! ~7 c$ k! _/ B) J5 J8 d* P( ^2 a
|
zan
|