目录
-
- 项目开发日报表
- 课堂笔记
项目开发日报表
项目名称 | 【苏嵌实训-嵌入式 linux C 第 7 天】 |
---|---|
今日进度 以及任务 | 1.嵌入式linuxC编程 2.文件编程 3.多任务编程 线程 |
本日任务完成情况 | |
本日开发中出现的问题汇总 | |
本日未解决问题 | |
本日开发收获 | 了解了嵌入式为什么要移植操作系统,creat/open/read/write/lseek/close的使用方法,还有线程的概念和基本操作创建和退出等 |
其他 |
课堂笔记
-
嵌入式为什么要移植操作系统:
1.提高软件移植性
2.操作系统提供多任务操作
3.操作系统提供丰富的网络协议栈
4.将所有设备抽象成文件,方便访问设备
-
用户如何访问内核空间?
系统调用 。内核提供安全的访问内核的数据及服务的接口:系统调用
-
用户如何系统调用?
调用系统提供的编程函数接口——API(用户编程接口)
-
文件编程
文件描述符的分配方式:动态分配,0,1,2这三个文件描述符已被系统占用,有特殊作用
- API
- creat(文件描述符,文件权限)成功返回文件描述符,失败返回-1
-
open
O_APPEND: write from end
O_CREAT,0655:没有的话新建,要加一个权限参数
O_WRONLY:只读写
- close(fd)
- write( fd, *buf , count )不能写进去整形数字 需要5+‘0’
- read( fd, *buf , count )
-
lseek(fd , offset , whence)先把fd移到头 再一10个SEEK_SET
SEEK_CUR:
- 向文件中写入三行,再一行一行读出来
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
int main(int argc,char *argv[])
{
if(argc!=2)
{
printf("Please input file name!\n");
exit(1);
}
int fd=creat(argv[1],0655);
if(fd == -1)
{
perror("creat file is failed!");//print error
exit(1);
}
printf("creat success:%d\n",fd);
if((fd = open(argv[1],O_RDWR|O_APPEND))<0)//O_APPEND: write from end
{
perror("open file is failed!");//print error
exit(1);
}
else
{
printf("open file success:%d\n",fd);
}
char *buf[3]={"aaaa","bbbb","cccc"};
for(int i=0;i<3;i++)
{
//write(fd,buf[i],sizeof(buf[i]));
write(fd,buf[i],4);
write(fd,"\n",1);
}
lseek(fd,0,SEEK_SET);
for(int i=0; i<3;i++)
{
read(fd,buf[i],5);
printf("%s\n",buf[i]);
}
close(fd);
return 0;
}
程序运行结果:
-
多任务 线程
多任务:当前CPU是单核 并发不并行。
- 线程操作
- Int pthread_create( 线程ID,线程属性,线程函数void *( *start_routine )(),线程函数传参 )
- 被动退出:pthread_cancle 线程不发生系统调用就没法用cancle结束线程
- 主动退出:pthread_exit( void *retval ) Return
- Join ( ID,**retval ) 等别的线程结束后退出
- Return 不会弹出栈 Pop cancle exit 会弹栈
- 两个子线程操作
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
#include <unistd.h>
#define MAX_SIZE 1024
int i=0;
void * thread1(void *arg)
{
while(1)
{
i++;
printf("i= %d\n",i);
sleep(2);
}
}
void * thread2(void *arg)
{
while(1)
{
printf("ok\n");
sleep(2);
}
}
int main()
{
pthread_t id1;
pthread_create(&id1,NULL,thread1,NULL);
pthread_t id2;
pthread_create(&id2,NULL,thread2,NULL);
pthread_join(id1,NULL);
pause();
return 0;
}