深圳做网站的企业,自己开发app要钱吗,石家庄企业网站制作哪家好,动态电子商务网站 制作-----在写文章之前#xff0c;分享一下今晚看伟东山老师的直播收获心得。我自身是一个小菜鸟#xff0c;第一次听QEMU模拟器软件#xff0c;不过听完老师的介绍感觉这功能好强大#xff0c;感觉都不用买硬件了来做实验的(不过还是建议买开发板来做实验#xff0c;比较有感…-----在写文章之前分享一下今晚看伟东山老师的直播收获心得。我自身是一个小菜鸟第一次听QEMU模拟器软件不过听完老师的介绍感觉这功能好强大感觉都不用买硬件了来做实验的(不过还是建议买开发板来做实验比较有感觉因为它还是不能模拟出特别先进的芯片以及无法模拟出类似于GPU等复杂的硬件而且搞底层软件开发的还是要有开发板来支持的当然当你手头不是宽裕的时候这个时候QEMU还是可以派上一定的作用了至少可以测试一般的外设功能的还是很强大的我自己也在摸索使用)这里有兴趣的小伙伴可以看这个教程--------http://wiki.100ask.org/100ask_imx6ul_qemu。同时也非常期待伟老师后期录制的新教学视频。 一、读取目录下的子文件1、在Linux系统下打开和读取目录下的子文件主要是用opendir与readdir函数来操作的我们解析一下这两个函数的原型a、opendir函数#include #include DIR *opendir(const char *name); //文件指针DIR *fdopendir(int fd);注opendir打开一个目录后得到一个DIR类型的指针给readdir使用。b、readdir函数#include struct dirent *readdir(DIR *dirp); //结构体指针DIR *dirp是一个目录int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);注1)readdir函数调用一次就会返回一个struct dirent类型的指针这个指针指向一个结构体变量这个结构体变量里面记录了一个目录项(所谓目录项就是目录中的一个子文件)。2)readdir调用一次只能读出一个目录项要想读出目录中所有的目录项必须多次调用readdir函数。readdir函数内部户记住哪个目录项已经被读过了哪个还没读所以多次调用后不会重复返回已经返回过的目录项。当readdir函数返回NULL时就表示目录中所有的目录项已经读完了。2、下面就来用代码来做一个简单的试验我们来判断它的文件类型是普通文件还是不是普通文件下面是我是在 /mnt/hgfs/day目录进行操作的里面有8个子文件代码示例#include #include #include int main(int argc, char **argv){NULL;struct dirent * pEnt NULL;unsigned int cnt 0;if (argc ! 2)printf(usage: %s dirname\n, argv[0]);//这个argv[0]表示传进来的文件目录名return -1;1]);if (NULL pDir)opendir);return -1;while (1)if(pEnt ! NULL)// 还有子文件在此处理子文件printf(name[%s] ,, pEnt-d_name);if (pEnt-d_type DT_REG)printf(是普通文件\n);elseprintf(不是普通文件\n);elsebreak;printf(总文件数为%d\n, cnt);43return 0;演示效果小结这里也可以去尝试测试一下其他一些类型文件方法是一样的。二、可重入函数介绍1、在实时系统的设计中经常会出现多个任务调用同一个函数的情况。如果有一个函数不幸被设计成为这样那么不同任务调用这个函数时可能修改其他任务调用这个函数的数据从而导致不可预料的后果。这样的函数是不安全的函数也叫不可重入函数。相反肯定有一个安全的函数这个安全的函数又叫可重入函数。那么什么是可重入函数呢所谓可重入是指一个可以被多个任务调用的过程任务在调用时不必担心数据是否会出错。一个可重入的函数简单来说就是可以被中断的函数也就是说可以在这个函数执行的任何时刻中断它转入OS调度下去执行另外一段代码而返回控制时不会出现什么错误而不可重入的函数由于使用了一些系统资源比如全局变量区中断向量表等所以它如果被中断的话可能会出现问题这类函数是不能运行在多任务环境下的。也可以这样理解重入即表示重复进入首先它意味着这个函数可以被中断其次意味着它除了使用自己栈上的变量以外不依赖于任何环境(包括 static)这样的函数就是purecode(纯代码)可重入可以允许有该函数的多个副本在运行由于它们使用的是分离的栈所以不会互相干扰。如果确实需要访问全局变量(包括 static)一定要注意实施互斥手段。可重入函数在并行运行环境中非常重要但是一般要为访问全局变量付出一些性能代价。编写可重入函数时若使用全局变量则应通过关中断、信号量(即P、V操作)等手段对其加以保护。说明若对所使用的全局变量不加以保护则此函数就不具有可重入性即当多个进程调用此函数时很有可能使有关全局变量变为不可知状态。示例假设 Exam 是 int 型全局变量函数 Squre_Exam 返回 Exam 平方值。那么如下函数不具有可重入性。int Exam 0; //全局变量unsigned int example( int para ){4unsigned int temp;6// (**)810return temp;此函数若被多个进程调用的话其结果可能是未知的因为当(**)语句刚执行完后另外一个使用本函数的进程可能正好被激活那么当新激活的进程执行到此函数时将使 Exam 赋与另一个不同的 para 值所以当控制重新回到 “temp Square_Exam( )” 后计算出的temp很可能不是预想中的结果。此函数应如下改进。int Exam 0;2unsigned int example( int para ){6unsigned int temp;8//(1) 加锁101214// 解锁16return temp;18申请不到“信号量”说明另外的进程正处于给 Exam 赋值并计算其平方过程中(即正在使用此信号)本进程必须等待其释放信号后才可继续执行。若申请到信号则可继续执行但其它进程必须等待本进程释放信号量后才能再使用本信号。保证函数的可重入性的方法1)在写函数时候尽量使用局部变量(例如寄存器、堆栈中的变量)2)对于要使用的全局变量要加以保护(如采取关中断、信号量等互斥方法)这样构成的函数就一定是一个可重入的函数。3)注意定义可重入函数函数内不能含有全局变量及static变量不能使用malloc、free注明上面的readdir函数和我们前面接触的一些函数是不同的首先readdir函数直接返回了一个结构体变量指针因为readdir内部申请了内存并且给我们返回了地址。多次调用readdir其实readir内部并不会重复申请内存而是使用第一次调用readdir时分配的那个内存。这个设计方法是readdir不可重入的关键。readdir在多次调用时是有关联的这个关联也标明readdir函数是不可重入的。三、总结明天继续分享双链表操作的文章学习今晚听伟老师的直播课收获还真蛮大的更加明确了自己要走的方向在这里也非常感谢老师的分享。---欢迎关注公众号可以查看往期的文章加我个人微信然后拉进交流群(因为之前有加入群里的经常发广告所以只能这样还望理解。群里只能讨论技术方面的发广告立刻飞机)