打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Android系统开发(6)Linux底层输入输出
一、操作系统的体系结构
计算机是由一堆硬件组成的,操作系统是为了有效的控制这些硬件资源的软件。操作系统除了有效地控制这些硬件资源的分配,并提供计算机运行所需要的功能之外,为了提供程序员更容易开发软件的环境,操作系统还提供了一整组系统调用接口。
如上图所示,最中间的是硬件,操作系统是由内核和系统调用接口组成,其中内核是直接操作硬件的,内核提供了对这些硬件资源的控制和进程管理,系统调用接口向上提供了统一的调用接口方便开发人员调用。最上层就是应用程序,在应用程序中调用系统接口就能实现对硬件的操作。二、Linux I/O系统
如上图Linux的I/O系统结构图,内核层有一个虚拟文件系统,就是使用标准的c类库封装的api,所以我们要操作文件系统只需要调用这里的api即可。
三、I/O的操作过程
1、打开文件一个应用程序通过要求内核打开相应的文件,宣告他要访问一个I/O设备,内核返回一个非负整数,叫描述符号(DescriptZ喎?"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcqOpob7OxLz+zqjSu7HqyrahvzKhorbB0LTOxLz+tsGjurTTzsS8/r+9sbRuPjC49tfWvdq1vbTmtKLG96OoxNq05qOp0LSjurTTtOa0osb3o6jE2rTmo6m/vbG0bj4wuPbX1r3atb3OxLz+M6GiuMSx5M7EvP7Ou9bDNKGiudix1c7EvP621NPaxNq6y7b40dSjrMv509C08r+qzsS8/ra808nOxLz+w+jK9rf70v3Tw6GjzsS8/sPoyva3+8rH0ru49rfHuLrV+8r9oaO1sbTyv6rSu7j2z9a05s7EvP678rS0vajSu7j20MLOxLz+yrGjrMTausvP8r34s8y3tbvY0ru49s7EvP7D6Mr2t/uho7WxtsHQtNK7uPbOxLz+yrGjrNPDb3BlbrvyY3JlYXRlt7W72LXEzsS8/sPoyva3+2ZkserKtrjDzsS8/qOsvavG5Nf3zqqyzsr9tKvLzbj4cmVhZLvyd3JpdGUutvjB9yjI5zogZm9wZW4pt7W72LXEysfSu7j2RklMRb3hubnWuNXrLCBGSUxFveG5ucrHsPy6rNPQzsS8/sPoyva3+7XEo6xGSUxFveG5ubqvyv2/ydLUv7TX98rHttRmZNaxvdOy2df3tcTPtc2ztffTw7XEt+LXsCwgy/y1xNPFtePKx7T409BJL0+7urTmPHA+TGludXjWp7PWuPfW1rj30fm1xM7EvP7Ptc2zuPHKvaOsyOdleHQyoaJleHQzoaJyZWlzZXJmc6GiRkFUoaJOVEZToaJpc285NjYwtci1yKOssrvNrLXEtMXFzLfWx/ihornixcy78sbky/y05rSiyeixuLa809Cyu82stcTOxLz+z7XNs7jxyr2jrMi7tvjV4tCpzsS8/s+1zbO2vL/J0tRtb3VudLW9xLO49sS/wrzPwqOsyrnO0sPHv7S1vdK7uPbNs9K7tcTEv8K8yvejrLj31tbOxLz+z7XNs8nPtcTEv8K8us3OxLz+ztLDx9PDbHPD/MHuv7TG8MC0ysfSu9H5tcSjrLbB0LSy2df308PG8MC00rK2vMrH0rvR+bXEo6zV4srH1PXDtNf2tb21xMTYo79MaW51eMTausvU2rj31tayu82stcTOxLz+z7XNs7jxyr3WrsnP1/bBy9K7uPaz6c/zsuOjrMq5tcPOxLz+oaLEv8K8oaK2wdC0t8POyrXIuMXE7rPJzqqz6c/zsuO1xLjFxO6jrNLytMu499bWzsS8/s+1zbO/tMbwwLTTw8bwwLS2vNK70fmjrNXiuPaz6c/zsuOzxs6q0OnE4s7EvP7Ptc2zo6hWRlOjrFZpcnR1YWwgRmlsZXN5c3RlbaOpPC9wPjxwPjxpbWcgc3JjPQ=="http://www.2cto.com/uploadfile/Collfiles/20140825/2014082508530025.png" alt="\" />
四、Linux底层输入输出
我们可以去GNU下载libc的源代码和帮助文档(源码下载地址:http://ftp.gnu.org/gnu/glibc/)打开和关闭文件流
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <sys types.h="">
#include <sys stat.h="">
#include <fcntl.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
//open file
if(argc<2){
printf("please input filename\n");
exit(1);
}else{
int fd;
umask(0000);
fd = open(argv[1], O_RDWR|O_CREAT, 0666);
if(fd < -1){
printf("error\n");
exit(1);
}else{
printf("success=%d\n", fd);
close(fd);
printf("closed\n");
}
}
return 0;
}</stdlib.h></fcntl.h></sys></sys></stdio.h>
读文件(写文件的过程和读文件类似)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <sys types.h="">
#include <sys stat.h="">
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]){
//open file
if(argc<2){
printf("please input filename\n");
exit(1);
}else{
int fd;
umask(0000);
fd = open(argv[1], O_RDWR|O_CREAT, 0666);
if(fd < -1){
printf("error\n");
exit(1);
}else{
printf("success=%d\n", fd);
char buf[1024];
memset(buf, 0, 1024);
int returnum = read(fd, buf, 1024);
if(returnum != -1){
printf("buf=%s\n", buf);
}else{
printf("read error\n");
exit(1);
}
close(fd);
printf("closed\n");
}
}
return 0;
}</string.h></stdlib.h></fcntl.h></sys></sys></stdio.h>
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux系统编程之进程间通信方式:命名管道(二)
Unix环境高级编程习题3.2
Linux系统编程之我的学习笔记1_linux函数学习心得
关于文件描述符【fd】
简单的telnet客户端
Linux系统调用(一)—文件读写操作
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服