随笔分类 -  C

摘要:启发主要来自于http://blog.csdn.net/newnewman80/article/details/7050090,基本是根据自己的习惯重组的。相关函数:kthread_create():创建内核线程struct task_struct *kthread_create(int (*threadfn)(void *data), void *data, const char namefmt[], ...); kernel thread可以用kernel_thread创建,但是在执行函数里面必须用daemonize释放资源并挂到init下,还需要用completion等待这一过程的... 阅读全文
posted @ 2012-06-28 17:39 五岳 阅读(1647) 评论(0) 推荐(0) 编辑
摘要:有了之前的基础,此文只是把一些以前没有注意到的和值得学习的知识做一个记录。第一章 作者认为使用#if 0 .... #endif比用/*和*/好,因为后者不能嵌套。但是对于//并没有说明。第二章 三字母词,用两个问号加一个符号表示另一个符号,比较类似于转义字符。查阅了一些资料,它的使用与编译器有关,了解即可,防止字符串常量被错误的解释。??( ==> [ ??< ==> { ??= ==> #??) ==> ] ??> ==> } ??/ ==> \??! ==> | ??' ==> ^ ??- ==> ~ 对于嵌套较深 阅读全文
posted @ 2012-01-11 21:21 五岳 阅读(610) 评论(4) 推荐(0) 编辑
摘要:近期课程的作业需要用到RPC编程,除了课堂上学到的知识,还得亲自动手。打算先写个简单的HelloWorld练习一下,顺便复习一下学到的知识。 RPC意为远程过程调用协议(Remote Procedure Call Protocol)。编制好单机应用程序,然后划分为两个或多个程序片,加入通信协议使得每片可以在单独的计算机上运行。从一个程序片调用另一个程序片的过程称为远程过程调用,即RPC。它是一个C/S模型,调用程序称为rpc client,被调用程序片称为rpc server。 对于RPC的编程过程可以简化如下:1.构建解决问题的常规应用程序;2.选择一组过程形成远程程序,以便将远程程... 阅读全文
posted @ 2011-11-26 02:13 五岳 阅读(4733) 评论(0) 推荐(1) 编辑
摘要:11月18日第四章 连接 连接器并不理解C语言,然而它能理解机器语言和内存布局。作者强调连接器并不能处理连接时和C语言相关的一些错误,如果C语言提供了lint,要善加利用。 每个外部对象都必须在程序某个地方进行定义。这就意味着如果一个程序中包括了语句extern int a;就应该在别的某个地方包括语句int a;。同时为了免两次定义同一个外部对象(无论有无初值)可能引起的错误,唯一的解决办法是每个外部变量只定义一次。 static可以把变量和函数的作用域限制在一个源文件中,避免命名冲突。 函数必须在调用它之前进行定义或声明,否则它的返回类型就默认为整型,这样当它与函数连接时就会得到... 阅读全文
posted @ 2011-11-18 22:32 五岳 阅读(551) 评论(0) 推荐(0) 编辑
摘要:自从上大学起,接触C也很久了,但是一直不怎么深入,也疏于练习。课程学习之余,专门的C只看过《C程序设计语言》、《C primer plus》,现在终于有了点时间看看更多的书了。本文主要记录阅读和学习《C陷阱与缺陷》的一些心得体会。11月15日前言和导读 “得心应手的工具在初学时的困难程度往往超过那些容易上手的工具。”比较认同这句话。我至今觉得自己其实还是个刚入了门的初学者。第一章 “词法”陷阱 由于之前学过编译原理,对编译器词法分析(主要是符号识别过程)比较了解,理解起来不困难。 在讲到"="和"=="、"|"和"||&qu 阅读全文
posted @ 2011-11-16 21:27 五岳 阅读(1527) 评论(14) 推荐(1) 编辑
摘要:放假归来,半个月没看书了,稍微有些生疏。被安排了新的工作,老的自学任务还需继续完成。 这一章内容比较多,按小节整理了一下。一、编码整数1.整数型的大小 由通信过程双方交换信息的协议标准引申出了编码的整数,进而探讨了各个整数类型的大小(char、int、long、int8_t、uint8_t等)、获取它们的长度的方法——sizeof()、并且有一个简单的程序示例TestSizes.c来展示。2.传输顺序 多个字节编码的整数,是从最高有效位(大端、左端)还是从最低有效位(小端、右端)发送,也是传输双方需要协调的。大多数协议使用大端顺序,因此它也被称为网络字节顺序。3.符号扩展 利用... 阅读全文
posted @ 2011-09-08 21:37 五岳 阅读(653) 评论(0) 推荐(0) 编辑
摘要:UDP的过程通信看上去比TCP简单一些,但也有许多细节需要注意。比如,UDP套接字使用前不必连接,TCP类似于电话通信,UDP类似于邮件通信,UDP套接字就像一个邮箱,可以把许多不同来源的信件或包裹放入其中。因此,在示例UDPEchoClient.c中,是需要用SockAddrsEqual()来检测回送的数据包是否是之前所送往的服务器回送的,尽管在示例中不太可能出现这种情况。 程序使用的地址结构、套接字的创建还是与TCP相差无几。由于没有建立连接的步骤,不需要调用listen(),一旦套接字具有地址就准备好接受消息。同时UDP也不需要使用accept()为每个客户获取一个新的套接字,而是... 阅读全文
posted @ 2011-08-05 22:25 五岳 阅读(874) 评论(0) 推荐(0) 编辑
摘要:这一章的核心内容是getaddrinfo()函数。 int getaddrinfo(constchar*hostStr, constchar* serviceStr, conststruct addrinfo *hints,struct addrinfo **results)//需要配合下面函数进行使用void freeaddrinfo(struct addrinfo *addrList) //释放创建的结果链表const char *gai_strerror(int errorCode) //如果getaddrinfo返回非0值,可以描述出错的是什么 含义: hostStr 主... 阅读全文
posted @ 2011-08-04 21:29 五岳 阅读(672) 评论(0) 推荐(0) 编辑
摘要:前段时间刚开始学习《TCP/IP Sockets编程(C语言实现) (第2版)》一书,又被告知建议先去看一下《UNIX网络编程(第一卷)》的部分内容会对理解其理论知识有所帮助,于是稍微停滞了一下。几天前所练习的实例已经有所生疏,因此为了复习这部分内容(前面所提起的第一本书第2章),此文便作为复习笔记(书本关键内容摘录),而以后各章节的学习也希望能做到及时总结和复习。 本章示例的工作方式:客户连接服务器并发送它的数据;服务器简单地把它接收到的任何内容发送回客户并断开连接。1.典型的TCP客户的通信步骤⑴使用socket()创建TCP套接字 参数涉及地址族、使用的协议,正确创建返回一个句柄... 阅读全文
posted @ 2011-08-03 21:08 五岳 阅读(2629) 评论(0) 推荐(0) 编辑
摘要:关于IPv6地址的结构(P23)struct in_addr { uint32_t s_addr[16];}; IPv6地址是128位的,因此对此生疑。经过对netinet/in.h查证,发现确实有误。以下是在in.h中的定义:struct in6_addr { union { uint8_t __u6_addr8[16];#if defined __USE_MISC || defined __USE_GNU uint16_t __u6_addr16[8]; uint32_t __u6_addr32[4];#endif } __in6_u... 阅读全文
posted @ 2011-07-30 11:25 五岳 阅读(851) 评论(0) 推荐(0) 编辑
摘要:作者所属大学Baylor的网站,在相关的页面上提供了下载。http://cs.ecs.baylor.edu/~donahoo/practical/CSockets2/textcode.html后来发现这篇日志访问挺高的,干脆自己打个包放上来了。http://files.cnblogs.com/wuyuegb2312/Sockets%E7%BC%96%E7%A8%8B%E6%BA%90%E7%A0%81.rar 阅读全文
posted @ 2011-07-29 11:50 五岳 阅读(1941) 评论(0) 推荐(0) 编辑

回到顶部