摘要:
在读取配置文件时,window环境下,有GetProfileString函数,而Linux下则没有。我写了一个能实现其功能的函数,如下所示,基本思想是捉住配置文件中用“[]”标记的段没有“=”,而非“[]”段有“=”这一特征,先找section段,再找键,得到对应的值。不当之处,欢迎批评指正。配置文件示例[section1]age = 12name = edward[section2]age = 13name = lewis代码示例#include "cstdio"#include "iostream"#include "string" 阅读全文
摘要:
1、unix风格的错误机制下,当函数,如wait执行出错后,it returns -1 and sets the global variable errno to an error code that indicate the cause of the error.如果成功,则返回有用的结果。 if ((pid = wait(NULL)) < 0) { fprintf(stderr, "wait... 阅读全文
摘要:
一、排版1.相对独立的程序块之间、变量声明之后必须加空行。int conn_fd;int ret; conn_fd = socket(AF_INET, SOCK_STREAM,0);if (conn_fd < 0) { perror("socket create");}2.程序块要采用缩进风格编写,缩进为4个空格或一个Tab键。3.对于较长的语句(超过个80字符)要分成多行书写,划分出的新行要进行适当的缩进,使排版整齐,语句可读。对于参数较长的函数也要划分成多行。ret = connect(conn_fd, (struct sockaddr *)&serv_a 阅读全文
摘要:
在前面曾总结过微软环境下编程的规范【1】,但是在linux下,没有自动补起,以及没有像VS那样高级好用的可视化开发工具,如果变量,函数定义太复杂,敲的也累,下面总结linux下编程风格,资料来源于网络。一、GNU风格1.函数返回类型说明和函数名分两行放置,函数起始字符和函数开头左花括号放到最左边,例如:static char *main (argc, argv) int argc; char *argv[];{ ......}或者是用标准C:static char *main (int argc, char *argv[]){ ......}如果参数太长不能放到一行,请在每行参数开头处对齐:i 阅读全文
摘要:
1、基于预线程化(prethreading)的并发服务器常规的并发服务器中,我们为每一个客户端创建一个新线程,代价较大。一个基于预线程化的服务器通过使用“生产者-消费者模型”来试图降低这种开销。服务器由一个主线程和一组worker线程组成的,主线程不断地接受来自客户端的连接请求,并将得到的连接描述符放在一个共享的缓冲区中。每一个worker线程反复从共享缓冲区中取出描述符,为客户端服务,然后等待下一个描述符。示例代码/* * echoservert_pre.c - A prethreaded concurrent echo server *//* $begin echoservertprema 阅读全文
摘要:
1、共享变量1)线程存储模型线程由内核自动调度,每个线程都有它自己的线程上下文(thread context),包括一个惟一的整数线程ID(Thread ID,TID),栈,栈指针,程序计数器,通用目的寄存器和条件码。每个线程和其他线程一起共享进程上下文的剩余部分,包括整个用户的虚拟地址空间,它是由只读文本(代码),读/写数据,堆以及所有的共享库代码和数据区域组成的,还有,线程也共享同样的打开文件的集合。[1]寄存器从不共享,而虚拟存储器总是共享。The memory model for the separate thread stacks is not as clean(整齐清楚的). Th 阅读全文
摘要:
1、如果逻辑控制流在时间上重叠,那么它们就是并发的。这种现象,称为并发(concurrency)。2、为了允许服务器同时为大量客户端服务,比较好的方法是:创建并发服务器,为每个客户端创建各自独立的逻辑流。现代OS提供的常用构造并发的方法有:进程和线程。1)每个逻辑流都是一个进程,由内核来调度维护。每个进程都有独立的虚拟地址空间,控制流通过IPC机制来进行通信。2)线程:运行在单一进程上下文中的逻辑流,由内核进行调度,共享同一进程的虚拟地址空间。由于进程控制和IPC的开销较高,所以基于进程的设计比基于线程的设计慢。常见IPC有:管道,FIFO,共享存储器,信号。3、基于线程的并发编程线程由内核自 阅读全文
摘要:
1、Web服务器以两种不同的方式向客户端提供内容:1)静态内容(static content):从服务器磁盘取得文件并把它返回客户端来服务。2)动态内容(dynamic content):运行一个可执行文件,并把它的输出返回给客户端。在服务器上一个子进程的上下文中运行一个程序并将它的输出返回给客户端来服务。2、在URL中,“?”用来分隔文件名和参数,多个参数用“&”来分隔。参数中不允许空格,用“%20”来表示。3、确定一个URL指向的是静态内容还是动态内容没有标准的规则。一种常见的方法是,确认一组目录,如cgi-bin,所有的可执行性文件都放在这这些目录中。https://mail.q 阅读全文
摘要:
1、每个网络应用都是基于客户端-服务器模型的。客户端-服务器模型中的基本操作是事务(transaction)(这里的事务与数据库中的事务有区别,没有数据库事务的特性,如原子性,这时原事务仅仅是客户端和服务器之间执行的一系列步骤)。认识到客户端和服务器是进程,而不是在本上下文中常被称为的机器或者主机。 2、网络 一个以太网段,包括电缆和集线器;每根电缆都有相同的最大位带宽;集线器不加分辩地将一个端... 阅读全文
摘要:
1、一个unix文件就是一个m字节的序列(b0b1b2...bm-1)。所有的IO设备,如网络,磁盘,终端,都被模型化为文件,而所有的输入和输出都被当作对相应文件的读和写来执行。 2、所有的输入和输出都被当作统一的方式来处理: 1)打开文件。一个应用程序通过要求内核打开相应的文件,来宣告它想要访问一个IO设备。内核返回一个小的非负整数,叫做描述符,它在后续对此文件的所有操作中标识这个文件。内核记... 阅读全文