2014025653《嵌入式系统程序设计》第七周学习总结

2014025653《嵌入式系统程序设计》第七周学习总结

    这周我学习了有名管道和消息队列,知道了许多函数,并且进行了应用练习。

学习总结

有名管道
有名管道相比无名管道好处:
        无名管道只能用于具有亲缘关系的进程之间,这就大大地限制了管道的使用。有名管道的出现突破了这种限制, 它可以使互不相关的两个进程实现彼此通信。FIFO 是严格地遵循先进先出规则的,对管道及 FIFO 的读总是从开始
处返回数据,对它们的写则把数据添加到末尾。
对阻塞打开和非阻塞打开的读写进行讨论。

mkfifo函数
mkfifo()函数的原型为:int mkfifo(const char *filename,mode_t mode)
        filename:要创建的管道
        mode:用来规定读写权限
FIFO相关出错信息

sscanf函数
sscanf函数与scanf函数用法相同,只是sscanf函数使用字符串进行输入的。
access函数
access()函数的原型为:int access(const char *filename, int amode);
        filename:需要测试的文件
        amode:操作模式
memset函数
memset()函数的原型为: void *memset(void *s, char ch, unsigned n);
        用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’;
消息队列
消息队列的含义:消息队列就是一些消息的列表。用户可以从消息队列中添加消息和读取消息等。
消息队列的优点
        异步:现在排队吧,以后再运行它。 去耦:将应用程序的逻辑。 韧性:如果它的一部分失败不会记下你的整个应用程序。 冗余:如果他们失败可以重试作业。 担保:可确保作业将被处理。 可扩展性:许多工人可以在队列中处理个别工作。 剖析:可帮助确定性能问题。
消息队列的缺点
        异步:你必须等待,直到作业完成。 负载:每个队列中的作业必须等待轮到它,然后才能进行处理。如果一个作业超支,它影响每个后续的工作。 架构:应用程序需要进行设计时考虑到队列中。
msgget函数
msgget()函数的原型为:int msgget(key_t key, int msgflg)
        key:消息队列的键值,多个进程可以通过它访问同一个消息队列,其中有个特殊值 IPC_PRIVATE。它用于创建当前进程的私有消息队列
        msgflg:权限标志位
msgsnd函数
msgsnd()函数原型为:int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg)
        msqid:消息队列的队列 ID
        msgp:指向消息结构的指针。
        msgsz:消息正文的字节数(不包括消息类型指针变量)
        msgflg:IPC_NOWAIT 若消息无法立即发送(比如:当前消息队列已满),函数会立即返回。0: msgsnd 调阻塞直到发送成功为止
msgrcv函数
msgrcv()函数的原型为:int msgrcv(int msgid, void *msgp, size_t msgsz, long int msgtyp, int msgflg)
        msqid:消息队列的队列 ID
        msgp:消息缓冲区, 同于 msgsnd()函数的 msgp
        msgsz:消息正文的字节数(不包括消息类型指针变量)
        msgtyp:0:接收消息队列中第一个消息。大于 0:接收消息队列中第一个类型为 msgtyp 的消息;小于 0:接收消息队列中第一个类型值不小于 msgtyp 绝对值;且类型值又最小的消息
        msgflg:MSG_NOERROR:若返回的消息比 msgsz 字节多,则消息就会截短到 msgsz 字节,且不通知消息发送进程;IPC_NOWAIT 若在消息队列中并没有相应类型的消息可以接收,则函数立即返回;0: msgsnd()调用阻塞直到接收一条相应类型的消息为止。
fgets函数
fgets()函数的原型为:char * fgets(char * string, int size, FILE * stream);
        string为一个字符数组,用来保存读取到的字符。
        size为要读取的字符的个数。如果该行字符数大于size-1,则读到 size-1 个字符时结束,并在最后补充' \0';如果该行字符数小于等于 size-1,则读取所有字符,并在最后补充 '\0'。即,每次最多读取 size-1 个字符。
        stream为文件流指针。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 9篇 180小时
第一周 200/200 1/1 20/20
第二周 400/600 1/2 20/40
第三周 600/1200 1/3 20/60
第四周 600/1800 1/4 20/80
第五周 600/2400 1/5 20/100
第六周 600/3000 1/6 20/120
第七周 600/3400 1/7 20/140
第八周 800/4200 1/8 20/160
第九周 800/5000 1/9 20/180
posted @ 2017-06-07 19:23  2014025653ZY  阅读(133)  评论(0编辑  收藏  举报