随笔分类 -  C

摘要:1.什么是消息队列 消息队列以队列形式(消息链表)的数据结构存放在系统内核中的,它可用于客户进程与服务进程之间的双向数据流。但是它跟信号量、共享内存一样,都只在系统范围内通信,且其在系统里没有名字,其内容不会自动删除,没有文件描述符。这些缺点导致现代进程通信基本不用它了。尽管如此,但是今天我还是需要了解它。2.消息的数据类型 首先,在头文件<sys/msg.h>中,定义了我们可用传给消息队列的数据类型:struct msgbuf{ long mtype; char mtext[1];}mtype是指该消息的类型,区分出不同的消息,我们就可以辨别出消息的来源,比如我们把客户进程的mt 阅读全文
posted @ 2011-06-16 16:00 winxp_520 阅读(3149) 评论(3) 推荐(2)
摘要:1.什么是无缓冲I/O 我们首先要知道Linux操作系统提供给我们的用户程序调用的接口,除了使用库函数,还可以直接使用系统调用。而今天我要介绍的相关函数就是直接调用了内核的系统调用,所以说它是无缓冲的,它跟标准的I/O函数相对应。2.打开或者创建文件的函数:open() 要操作相关文件,就必须获得该文件的句柄,专业点叫文件描述符。它是进程在打开一个文件或者创建一个文件时,内核返回给该进程的一个唯一的非负的整数,且一定是当前可以的描述符中最小的一个数。进程获得这个文件描述符后,就可以根据它来告诉read()或者write相关函数具体来操作哪个文件了。 Tips:通常系统对一个进程可打开的文件描述 阅读全文
posted @ 2011-06-12 20:37 winxp_520 阅读(2832) 评论(1) 推荐(2)
摘要:我们都知道,进程就是正在执行的程序。而在Linux中,可以使用一个进程来创建另外一个进程。这样的话,Linux的进程的组织结构其实有点像Linux目录树,是个层次结构的,可以使用pstree命令来查看。在最上面是init程序的执行进程。它是所有进程的老祖宗。Linux提供了两个函数来创建进程。1.fork() fork()提供了创建进程的基本操作,可以说它是Linux系统多任务的基础。该函数在unistd.h库中声明。 #include <stdio.h>#include <unistd.h>#include <stdlib.h>int main(){ pr 阅读全文
posted @ 2011-06-06 13:39 winxp_520 阅读(4110) 评论(2) 推荐(1)
摘要:要求是将“i am student”,反转之后变成“student am i”.思路是这样的:可以先将整个字符串反转,变成”tneduts ma i”;然后根据空格将字符串分成几段处理,分别把这几小段再反转过来就行了。完整C代码如下:#include <stdio.h>#include <string.h>//该函数用于将str完整的反转void reverse(char str[]){ int len = strlen(str); for(int i=0;i<len/2;i++){ char temp = str[i]; str[i]= str[len-i-1] 阅读全文
posted @ 2011-05-27 14:37 winxp_520 阅读(262) 评论(0) 推荐(0)
摘要:给定一个单链表,检测该链表是否含有环形结构。这个题目主要是根据环的特性,使用两个指针,不同的步长,向一个方向前进,如果有环,他们两个指针必定相遇。#include <stdio.h>#include <malloc.h>typedef struct LNode{ int data; struct LNode *next;}LNode;int isLoop(LNode *head){ LNode *p=head,*q=head; while( q && q->next ){ p=p->next; q=q->next->next; i 阅读全文
posted @ 2011-05-27 14:35 winxp_520 阅读(549) 评论(2) 推荐(0)
摘要:C中的数据在内存的存储可以用存储时期、作用域和链接来体现。 存储时期 存储时期分为静态的、自动的和分配的。静态的变量一般用关键字static来标示(全局变量不用static也是静态的),它在程序开始执行的时候就为变量分配内存空间,在整个程序中一直存在。自动的用auto来标示(默认省略auto),变量的内存空间要在程序执行到该变量的代码块的时候才开始分配,在退出该代码块时就自动释放了。如果是手段分配的,需要调用malloc()或者calloc()函数来开辟内存空间,同时也需要手动调用free()来释放该内存空间,如果超出改变量的作用域还没有手动释放内存,则该块内存由于无法利用而变成垃圾空间了,可 阅读全文
posted @ 2011-05-27 14:20 winxp_520 阅读(661) 评论(0) 推荐(0)