在手机上编程:自制的小飞可编程复数计算器(小飞计算器)
寒假学习 第七、八天 (linux 高级编程) 笔记 小结
一、IO基础
1.认识内核对象
2.怎么访问文件
3.每个程序默认打开三个文件设备
lrwx------ 1 root root 64 1月 22 21:41 1 -> /dev/pts/4
lrwx------ 1 root root 64 1月 22 21:41 2 -> /dev/pts/4
1:标准输出
2:错误输出
ssize_t write(int fd, void *buf,//要写入内核对象的数据 size_t size);//写入数据大小 返回: >0 实际写入的数据 -1 写入错误 ssize_t read(int fd, void *buf,//返回数据的空间 size_t size);//空间大小 返回: >0:实际读取的数据 =0:碰到文件结束符号EOF (ctrl+d) -1:读取错误
通过 write 跟 read 来访问
4、文件的类型 和 权限
目录文件d
普通文件f
字符设备文件c
块设备文件b
软连接文件l
管道文件psocket文件s
rwx 就不多说了
s/S用来当程序执行时有s设置所设置的权限2:组设置位 设置位向其他用户开放拥有者权限的权限.用户设置位4:用户设置位 设置位向其他用户开放组用户权限的权限.组用户设置位
为什么分大小写见下面t/T中说的
t/T粘着位(只针对目录有效)粘着位:一个文件可读写的用户并一定相让他有删除此文件的权限,如果文件设置了t权限则只用属主和root有删除文件的权限,通过chmod +t filename 来设置t权限。因为 显示权限时 t/T 要占用 x 权限的位置 说以 用t 表示设置粘着位 并且 有 x 权限,T表示设置粘着位但 没有 有 x 权限。
详细的解释 http://hi.baidu.com/reyleon/item/e27650e588a1ce0a8e3ea891
5.通过文件描述符号读写各种数据
open函数与creat函数 int open( const char *filename,//文件名 int flags,//open的方式[创建/打开] mode_t mode//权限(只有创建的时候有效) ) 返回: >=0:内核文件描述符号. =-1:打开/创建失败 open的方式: 必选方式:O_RDONLY O_WRONLY O_RDWR,必须选择一个 创建/打开:O_CREAT 可选方式: 对打开可选方式:O_APPEND O_TRUNC(清空数据) 对创建可选方式:O_EXCL 组合: 创建: O_RDWR|O_CREAT O_RDWR|O_CREAT | O_EXCL 打开: O_RDWR O_RDWR|O_APPEND O_RDWR|O_TRUNC 权限: 建议使用8进制数 关闭 void close(int fd);
列子:
#include<stdio.h> #include<unistd.h> #include<fcntl.h> struct stu { char name[20]; int age; char c; }; void input(struct stu* p_s) { printf("Plase input:\n"); printf("name:"); scanf("%s",p_s->name); printf("age:"); scanf("%d",&p_s->age); printf("sex:"); getchar(); scanf("%c",&p_s->c); getchar(); } int main() { int r=open("stu.dat",O_WRONLY|O_CREAT|O_EXCL,0666); struct stu s; char t; while(1) { input(&s); write(r,&s,sizeof(s)); printf("Next?"); scanf("%c",&t); if(t==‘N‘||t==‘n‘){ break; } system("clear"); } close(r); }
读取stu.dat 中的数据
#include<stdio.h> #include<unistd.h> #include<fcntl.h> struct stu { char name[20]; int age; char c; }; int main() { int r=open("stu.dat",O_RDONLY); int t; struct stu s; while(1) { t=read(r,&s,sizeof(s)); printf("t=%d\n",t); if(t==0||t==-1) break; printf("%s\t%d\t%c\n",s.name,s.age,s.c); } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。