完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
##1.嵌入式系统开发:通过内核提供的服务实现相应的功能
软件 内核 硬件 c语言程序设计:无os语法; ##2.Linux系统空间划分:用户空间,内核空间, 划分空间的目的是:为了保护内核的访问安全;保证用户空间不能随便访问内核; ##3.用户空间如何访问内核空间? 必须发送系统调用; ##4.用户如何发送系统调用? 调用操作系统提供的函数接口–API:用户编程接口; 文件操作、进程操作(多任务), 1.文件描述符(文件的ID号); ①动态分配,只有当操作这个文件时,系统会分配文件描述符; ②非负整数,从3编号开始,(0,1,2这三个有其他作用); 2.无缓冲访问文件(系统调用) creat函数: #include #include #include #include int main() { creat(“hello.txt”,S_IRWXU); //创建一个hello文本,设置权限; return 0; } int fd=creat(“mm”,0655);//如果创建失败,返回值是-1; 如何找到错误原因? 包含头文件 #include ①errno :系统的全局变量,保存系统调用的错误值; if(errno == EISDIR) 判断打开的文件是不是目录; ②perror(“create file error!”) //自动换行,打印的系统的错误信息; open函数 int fd=open(“hello.txt”,0_RDWR); //打开文件,以读写方式打开; if(fd == -1);//判断文件是否打开成功; int fd=open(“hello.txt”,0_RDWR | 0_CREAT,0644);//打开文件,不存在就创建,并设置权限; write函数 第一个参数 文件描述符,第二个参数 数据的地址, 第三个参数 数据的长度; 包含头文件 #include int fd=open(“hello.txt”,0_RDWR | 0_CREAT,0644); char buffer[1024]=“hello world”; write(fd,buffer,strlen(buffer)); 如果多次次编译write, 结果文件依旧是一句话,因为是从头写入,会将之前的语句覆盖掉; 可以通过0_APPEND,从末尾开始写,这样就可以出现多个句子; int fd=open(“hello.txt”,0_RDWR | 0_CREAT | 0_APPEND,0644); 验证返回值: int w_len= write(fd,buffer,strlen(buffer)); if(w_len == -1) { perror(“write error!”); exit(1); } read函数 第一个参数 文件描述符,第二个参数 数据的地址, 第三个参数 数据的长度; int r_len=read(fd,buffer,sizeof(buffer)); //从fd读取数据,放到buffer中; printf(“read data=%sn”,buffer); 注意 读写位置是在数据的后面,所以会读不到数据; 如何将读写位置移动?lseek函数; lsee用来控制读写位置; 每一个已打开文件都有读写位置,通常指向文件开头,若以0_APPEND方式打开,则读写位置在文件尾; 第一个参数 文件描述符,第二个参数 移动的长度,负数表示往前移动,正数表示后移, 第三个参数是位置,SEEK_CUR指 当前位置往后增加n个位移量; SEEK_SET指 先移到开始位置; SEEK_END 指先移到文件尾,在移动字节数 int fd=open(“hello.txt”,0_RDWR | 0_CREAT,0644); char buffer[1024]=“hello world”; int w_len= write(fd,buffer,strlen(buffer)); if(w_len == -1) { perror(“write error!”); exit(1); } printf(“write data len =%dn”,w_len); lseek(fd,0,SEEK_SET);// memset(buffer,0,sizeof(buffer)); int r_len=read(fd,buffer,sizeof(buffer)); //从fd读取数据,放到buffer中; printf(“read data=%sn”,buffer); close 函数 close(fd); 补充:返回当前位置距离头的位置; off_t pos = -11; int size = lseek(fd,0,SEEK_CUR); printf(“size=%dn”,size); 修改写的格式,使其写入三行且换行: char buffer[1024]=“hello world”; int i; for(i=0;i<3;i++) { int w_len= write(fd,buffer,strlen(buffer)); if(w_len == -1){ perror(“write error!”); exit(1); } printf(“write data len =%dn”,w_len); write(fd,"n",1); } 修改读取文件的函数: read_line(fd,buffer,sizeof(buffer));//读一行 int read_line(int fd,char*buffer,int max_len); { int i; int r_len; char temp; for(i=0;i { r_len=read(fd,&temp,1);// 每次读一个字符; if(r_len == -1) { perror(“read data error”); break; } if(r_len == 0) break; if(temp == ‘n’) break; buffer=temp; } return i; |
|
|
|
只有小组成员才能发言,加入小组>>
815 浏览 0 评论
1162 浏览 1 评论
2536 浏览 5 评论
2871 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2720 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1111浏览 3评论
198浏览 2评论
465浏览 2评论
379浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
462浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 03:45 , Processed in 1.352933 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号