C
文章平均质量分 86
mathZHA
这个作者很懒,什么都没留下…
展开
-
linux程序设计——网络信息(第十五章)
test原创 2015-07-23 23:56:24 · 592 阅读 · 0 评论 -
linux程序设计——同时执行的线程(第十二章)
12.4 同时执行接下来编写一个程序来验证两个线程的执行是同时执行的(当然,如果是在一个单处理器系统上,线程的同时执行就需要靠CPU在线程之间的快速切换来实现).这个程序中,在两个线程之间使用轮询技术,所以效率很低,同时程序还有利用这一事实,即除局部变量之外,所有其他变量都将在一个进程中的所有线程之间共享.编写程序thread2.c,在thread1.c上增加了另外一个文件范围变量来原创 2015-07-05 13:57:18 · 859 阅读 · 0 评论 -
linux程序设计——多线程(第十二章)
12.8 多线程之前,总是让程序的主线程仅仅创建一个线程,这节将演示如何在同一个程序中创建多个线程,然后如何以不同于其启动顺序将它们合并在一起。此外,还演示多线程编程时容易出现的时序问题.编写程序thread8.c/************************************************************************* > File N原创 2015-07-07 20:05:59 · 708 阅读 · 0 评论 -
linux程序设计——对FIFO进行读写操作(第十三章)
4.对FIFO进行读写操作使用O_NONBLOCK模式会影响的对FIFO的read和write调用.对一个空的,阻塞的FIFO(即没有用O_NONBLOCK标志打开)的read调用将等待,直到有数据可以读时才继续执行.与此相反,对一个空的,非阻塞的FIFO的read调用将立刻返回0字节.对一个完全阻塞的FIFO的write调用将等待,直到数据可以写入时才继续执行.如果非阻塞的FIFO不原创 2015-07-14 23:36:11 · 5692 阅读 · 0 评论 -
linux程序设计——把管道用作标准输入和输出(第十三章)
13.5.1 管道关闭后的读操作接下来先研究一下打开的文件描述符,此前一直采取的是让读进程读取一些数据然后直接退出的方式,并假设linux会把清理文件当作是在进程结束时应该做的工作的一部分.但大多数从标准输入读取数据的程序采用的确实与此前的例子非常不同的另外一种做法.通常,它们并不直到有多少数据需要读取,所以往往采用循环的方法,读取数据--处理数据--读取更多的数据,直到没有数据可读原创 2015-07-12 23:11:00 · 3450 阅读 · 0 评论 -
linux程序设计——pipe调用在两进程之间通信(第十三章)
13.4 pipe调用在看过高级的popen函数之后,再来看看底层的pipe函数.通过这个函数在两个程序之间传递数据不需要启动一个shell来解释请求的命令.它同时提供了对读写数据的更多控制.pipe函数的原型如下所示:#include int pipe(int file_descriptor[2]);参数:是一个由两个整数类型的文件描述符组成的数组.返回值:该函数在数组中原创 2015-07-10 18:51:46 · 3062 阅读 · 0 评论 -
linux程序设计——select调用和多客户(第十五章)
15.4.1 select系统调用在编写linux应用程序时,经常会遇到需要检查好几个输入的状态才能确定下一步行动的情况.例如,像终端仿真器这样的通信程序,需要有效地同时读取键盘和串行口.如果是在一个单用户系统中,运行一个"忙等待"循环还是可以接受的,它不停地扫描输入设置看是否有数据,如果有数据到达就读取它,但这种做法很消耗CPU的时间.select系统调用允许程序同时在多个底层文件原创 2015-07-26 23:32:20 · 817 阅读 · 0 评论 -
linux程序设计——取消一个线程(第十二章)
12.7 取消一个线程有时,想让一个线程可以要求另一个线程终止,就像给它发送一个信号一样。线程有方法可以做到这一点,与与信号处理一样,线程可以被要求终止时改变其行为。pthread_cancel是用于请求一个线程终止的函数:#inlude int pthread_cancel(pthread_t thread);这个函数提供一个线程标识符就可以发送请求来取消它。线程可以用p原创 2015-07-07 10:16:14 · 745 阅读 · 0 评论 -
linux程序设计——入门(第一章)
Nei Matthew和Richard Stones的《linux程序设计》(第四版),每一章记一些主要内容。Linux应用程序表现为两种特殊类型的文件:可执行文件和脚本文件。可执行文件是计算机可以直接运行的程序,它们相当于Windows中的.exe文件。脚本文件是一组指令的集合,这些指令将由另一个程序(即解释器)来执行,它们相当于Windows中的.bat文件,原创 2015-05-31 17:32:13 · 904 阅读 · 0 评论 -
linux程序设计——MySQL管理(第八章)
8.2 MySQL管理包含MySQL发行版中的一些有用的工具程序使管理工作变得更加容易,它们中最常用的是mysqladmin程序。8.2.1 命令除了mysqlshow命令以外,所有的MySQL命令都接受下面的3个标准参数。命令选项 参数 说明-u 用户名 在默认情况下,mysql工具会尝试把当前linux的用户名作为MySQL的用户名,-u参数原创 2015-06-19 21:30:43 · 517 阅读 · 0 评论 -
linux程序设计——linux环境(第四章)
4.5 用户信息这篇为linux环境,代码在linux环境代码下载。除了著名的init程序以外,所有的linux程序都是由其他程序或用户启动的。(内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以init始终是第一个进程(其进程编号始终为1)。当一个用户登录进linux系统时,用户有一个用原创 2015-06-09 10:08:30 · 661 阅读 · 0 评论 -
linux程序设计——MySQL管理(第八章)
8.2.2 创建用户并赋予权限作为MySQL管理员,最常见的工作就是维护用户信息——在MySQL中添加和删除用户并管理它们的权限。通过在MySQL控制台中使用grant和revoke命令来管理用户权限。1.grant命令MySQL的grant命令几乎完全遵循SQL92的语法,它的常规格式是:grant on to [identified by user-password] [原创 2015-06-20 16:13:43 · 652 阅读 · 0 评论 -
linux程序设计——安装MySQL(第八章)
第八章 MySQL这章介绍RDBMS或关系型数据库管理系统(Relational Database Management System)。两个著名的开源RDBMS应用软件是PostgreSQL和MySQL。PostgreSQL能在任何情况下免费使用。MySQL在许多场合下也是免费的。用于同一用途的商业产品有Oracle、Sybase和DB2,它们都能运行与多个平台之上。仅支持Window原创 2015-06-18 21:36:23 · 625 阅读 · 0 评论 -
linux程序设计——使用C语言访问MySQL(第八章)
8.3 使用C语言访问MySQL数据Windows本地程序(如Access)可以通过ODBC驱动程序来访问MySQL,甚至有针对linuxODBC驱动程序。下面讨论使用C语言来访问MySQL.8.3.1 连接例程用C语言连接MySQL数据库包含两个步骤:1.初始化一个连接句柄结构2.实际进行连接首先,使用mysql_init来初始化连接句柄:#include原创 2015-06-22 20:52:28 · 678 阅读 · 0 评论 -
linux程序设计——进程管道(第十三章)
第13章 进程间通信:管道在第11章,看到了一种在两个进程间发送消息的非常简单的方法:使用信号量.创建通知时间,通过它引起响应,但传送的信息只限于一个信号值.在本章中,将介绍管道,通过它进程之间可以交换更有用的数据.13.1 什么是管道当从一个进程连接数据流到另一个进程时,使用术语管道(pipe)。通常是把一个进程的输出通过管道连接到另一个进程的输入。这实际上就是把原创 2015-07-08 21:25:35 · 745 阅读 · 0 评论 -
linux程序设计——主机字节序和网络字节序(第十五章)
15.2.10 主机字节序和网络字节序当在基于intel处理器的linux机器上运行新版本的服务器和客户程序时,可以用netstat命令查看网络连接状况.它显示了客户/服务器连接正在等待关闭.连接将在一段超时间之后关闭,如下所示:可以看到这条连接对应的服务器和客户的端口号.local address一栏显示的是服务器,而foreign address一栏显示的是远程客户(即使是在原创 2015-07-22 23:43:25 · 1540 阅读 · 0 评论 -
linux程序设计——消息队列(第十四章)
14.3 消息队列这章介绍第三个也是最后一个System V IPC机制;消息队列(message queue).消息队列与命名管道有许多相似之处,但少了在打开和关闭管道方面的复杂性.使用消息队列并未解决在使用命名管道时遇到的一些问题,比如管道满时的阻塞问题.消息队列提供了一种在两个不相关的进程之间传递数据的相当简单且有效的方法.与命名管道相比,消息队列的优势在于,它独立与发送和原创 2015-07-19 22:52:50 · 644 阅读 · 0 评论 -
linux程序设计——IPC状态命令(第十四章)
14.5 IPC状态命令虽然X/Open规范并没有定义它们,但大多数linux系统都提供了一组命令,用于从命令行上访问IPC信息以及清理游离的IPC机制.它们是ipcs和ipcrm命令,这两个命令对于开发程序非常有用.IPC机制一个让人烦恼的问题是:编写错误的程序或者因为某些原因而执行失败的程序把它的IPC资源(如消息队列中的数据)遗留在系统中,并且这些资源在程序结束后很长时间仍然在原创 2015-07-19 23:10:35 · 1024 阅读 · 0 评论 -
linux程序设计——共享内存(第十四章)
14.2 共享内存共享内存是3个IPC机制中的第二个,它允许两个不相关的进程访问同一个逻辑内存.共享内存是在两个正在运行的进程之间传递数据的一种非常有效的方式.大多数共享内存的具体实现,都把由不同进程之间共享的内存安排为同一段物理内存.共享内存是由IPC为进程创建的一个特殊的地址访问,它将出现在该进程的地址空间中,其他进程可以将同一段共享内存连接到它们自己的地址空间中.所有进程都可以原创 2015-07-18 23:30:40 · 1018 阅读 · 0 评论 -
linux程序设计——使用信号量(第十四章)
14.1.4 使用信号量下面将用完整的编程接口为二进制信号量创建一个简单得多的PV类型接口,然后用这个非常简单的接口来演示信号量是如何工作的。用程序sem1.c来试验信号量,该程序可以被多次调用。通过一个可选的参数来指定程序是负责创建信号量还是负责删除信号量。用两个不同字符的输出来表示进入和离开临界区域。如果程序启动时带有一个参数,它将在进入和退出临界区域时打印字符X;而程序的其原创 2015-07-17 23:57:03 · 900 阅读 · 0 评论 -
C++对象模型——关于对象(第一章)
第一章 关于对象在C语言中,"数据"和"处理数据的操作(函数)"是分开声明的,也就是说,语言本身并没有支持"数据和函数"之间的关联性.我们把这种程序方法成为程序性,由一组"分布在各个以功能为导向的函数中"的算法所驱动,它们处理的是共同的外部数据.举个例子,如果声明一个struct Point3d,像这样:typedef struct point3d{ float x;原创 2015-07-28 00:07:05 · 814 阅读 · 0 评论 -
linux程序设计——信号量(第十四章)
第14章 信号量,共享内存和消息队列在本章中,将介绍一组进程间通信的机制,它们最初是由AT&T System V.2版本的UNIX引入.由于这些机制都出现在同一个版本中并且有着相似的编程接口,所以它们又常被称为IPC(Inter-Process Communication,进程间通信)机制,或者被更常见的称为System V IPC.14.1 信号量当编写的程序使用了线程时原创 2015-07-16 23:12:58 · 1028 阅读 · 0 评论 -
程序的机器级表示
原文在文章1点击打开链接,文章2点击打开链接,还有文章3点击打开链接。(学渣从前天开始看深入理解计算机系统,作为数学党想了解一点计算机知识的框架,此外豆瓣的书评在这里->点击这里打开链接。看到第三章有这么一句:传递指令的两个操作数不能都指向存储器位置,不懂,就搜搜了发现几篇文章,先复制过来,留着慢慢看)。文章1x86主要寄存器程序计数器(32位,%eip):PC整数转载 2015-07-16 17:00:30 · 5623 阅读 · 1 评论 -
linux程序设计——使用FIFO的客户/服务器的应用程序(第十三章)
13.6.2 使用FIFO的客户/服务器应用程序作为学习FIFO的最后一部分内容,现在考虑怎样通过命名管道来编写一个非常简答的客户/服务器应用程序。用一个服务器进程来接受请求,对它们进行处理,最后把结果数据返回给发送请求的一方:客户。如果想要允许多个客户进行都可以向服务器发送数据,假设被处理的数据可以被拆分为一个个数据块,每个的长度都小于PIPE_BUF字节。因为服务器每次只能处原创 2015-07-15 23:33:05 · 1461 阅读 · 0 评论 -
linux程序设计——命名管道FIFO(第十三章)
13.6 命名管道:FIFO至此,还只能在相关的程序之间传递数据,即这些数据是由一个共同的祖先进程启动的。但如果想在不相关的额进程之间交换数据,这还不是很方便。可以用FIFO文件来完成这项工作,它通常也被称为命名管道(named pipe)。命名管道是一种特殊类型的文件,它在文件系统中以文件名的形式存在,但它的行为却和此前见过的没有名字的管道类似。可以在命令行上创建命名管道,也可原创 2015-07-13 22:27:19 · 1347 阅读 · 0 评论 -
linux程序设计——父进程和子进程(第十三章)
13.5 父进程和子进程在接下来的对pipe调用的研究中,将学习如何在子进程中运行一个与父进程完全不同的另外一个程序,而不是仅仅运行一个相同程序.使用exec调用来完成这一项工作.这里的一个难点是,通过exec调用的进程需要知道应该访问哪个文件描述符.在前面的例子中,因为子进程本身有file_pipes数据的一份副本(点击打开"fork复制进程映像"链接),所以这并不成为问题.但经过ex原创 2015-07-11 23:29:19 · 1254 阅读 · 0 评论 -
linux程序设计——如何实现popen(第十三章)
13.3.2 如何实现popen请求popen调用运行一个程序时,它首先启动shell,即系统中的sh命令,然后将command字符串作为一个参数传递给它,这有两个效果,一个好,一个不好.在linux中,所有的参数扩展都是由shell来完成的.所以,在启动程序之前先启动shell来分析命令字符串,就可以使各种shell扩展(如*.c所指的是哪些文件)在程序启动之前就全部完成.这个功能原创 2015-07-09 21:34:06 · 1222 阅读 · 0 评论 -
linux程序设计——管道输出数据到popen(第十三章)
13.3 将输出送往popen看过捕获外部程序输出的例子后,再来看一个将输出发送到外部程序的示例程序popen2.c,它将数据通过管道送到另一个程序.在这里使用的是od(八进制)命令.编写程序popen2.c,它非常类似popen1.c,唯一的不同是这个程序将数据写入管道,而不是从管道中读取./*******************************************原创 2015-07-09 20:31:17 · 1760 阅读 · 0 评论 -
linux程序设计——执行SQL语句(第八章)
8.3 使用C语言访问MySQL数据8.3.3 执行SQL语句执行SQL语句的主要API函数被恰当的命名为:int mysql_query(MYSQL *connection, const char *query);这个例程接受连接结构指针和文本字符串形式的有效SQL语句,如果成功,它返回0.1.不返回数据的SQL语句为简单起见,先看一些不返回任何数据的SQL语句:U原创 2015-06-24 19:36:01 · 1030 阅读 · 0 评论 -
linux程序设计——第一个线程程序(第十二章)
第12章 POSIX线程在第11章中,介绍了如何在linux中处理进程.但有时人们认为,用fork调用来创建新进程的代价太高.在这种情况下,如果能让一个进程同时做两件事情或者至少看起来是这样会非常有用,而且,人们页希望能有两件或更多的事情以一种非常紧密的方式同时发生,这就需要线程发挥作用了.12.1 什么是线程在一个程序中多个执行路线就叫做线程(thread).更准确的定义原创 2015-07-05 11:12:17 · 843 阅读 · 0 评论 -
linux程序设计——执行SQL语句(第八章)
8.3 使用C语言访问MySQL数据4.处理返回的数据MySQL返回两种类型的数据1.从表中提取的信息,也就是列数据2.关于数据的数据,即所谓的元数据(metadata),例如列名和类型.mysql_field_count函数提供了一些关于查询结果的基本信息,它接受连接对象,并返回结果集中的字段(列)数目:unsigned int mysql_field_count(原创 2015-06-25 21:38:29 · 767 阅读 · 0 评论 -
linux程序设计——进程和信号(第十一章)
11.4 信号量信号是UNIX和linux系统响应某些条件而产生的一个事件.接收到该信号的进程会相应地采取一些行动.用术语生成(raise)表示一个信号的产生,使用术语捕获(catch)表示接收一个信号.信号是由于某些错误条件而生成的,例如内存段冲突,浮点处理器错误或非法指令等.它们由shell和终端处理器生成来引起中断,它们还可以作为在进程间传递消息或修改行为的一种方式,明确地由一个进原创 2015-07-02 21:31:50 · 774 阅读 · 0 评论 -
linux程序设计——数据报(第十五章)
15.5 数据报在本章中,重点介绍了如何编写与客户之间维持连接的应用程序.使用面向连接的TCP套接字来完成这一工作.但在某些情况下,在程序中花费时间来建立和维持一个套接字连接是不必要的.早先,在程序getdate.c中所使用的daytime服务就是一个很好的例子,首先创建一个套接字,然后建立连接,读取一个响应,读取一个响应,最后关闭连接.在这一过程中,使用了很多操作步骤,仅仅为了获取原创 2015-07-26 23:54:19 · 752 阅读 · 0 评论 -
linux程序设计——套接字选项(第十五章)
现在可以改进客户程序,使它可以连接到任何有名字的主机,这次不是连接到示例服务器,而是连接到一个标准服务,这样就可以演示端口号的提取操作了.大多数UNIX和一些linux系统都有一项标准服务daytime,它提供系统的日期和时间.客户可以连接到这个服务来查看服务器的当前日期和时间.下面就是完成这一工作的客户程序getdate.c编写程序getdate.c/****************原创 2015-07-25 00:02:34 · 805 阅读 · 0 评论 -
linux程序设计——多客户(第十五章)
15.4 多客户到目前为止,本章一直介绍的是,如果用套接字来实现本地的和跨网络的客户/服务器系统.一旦连接建立,套接字连接的行为就类似于打开的底层文件描述符,而且在很多方面类似于双向管道.现在考虑有多个客户同时连接一个服务器的情况.服务器程序在接受来自客户的一个新连接时,会创建出一个新的套接字,而原先的监听套接字将被保留以继续监听以后的连接.如果服务器不能立刻接受后来的连接,它们将被原创 2015-07-25 23:29:22 · 703 阅读 · 0 评论 -
C语言注释规范
2-1:一般情况下,源程序有效注释量必须在20%以上。说明:注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。2-2:文件头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、修改日志等。示例:下面这段头文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。/****转载 2015-07-04 12:40:28 · 10590 阅读 · 0 评论 -
linux程序设计——套接字连接(第十五章)
15.2.3 套接字地址每个套接字域都有自己的地址格式,对于AF_UNIX域套接字来说,它的地址由结构sockaddr_un来描述,该结构定义在头文件sys/un.h中.struct sockaddr_un { sa_family_t sun_family; /* AF_UNIX */ char sun_path[]; /* pathname */};原创 2015-07-21 23:51:50 · 722 阅读 · 0 评论 -
linux程序设计——套接字(第十五章)
第15章 套接字在本章中,介绍进程间通信的另一种方法,与第13,14章讨论的方法相比,它有着明显的不同.当目前为止,讨论的所有机制都依靠一台计算机系统的共享资源实现.这里的资源可以是文件系统空间,共享的物理内存或消息队列,但只有运行在同一台机器上的进程才能使用它们.伯克利版本的UNIX系统引入了一种新的通信工具----套接字接口(socket interface),它是管道概念的一种原创 2015-07-20 21:12:08 · 987 阅读 · 0 评论 -
linux程序设计——多线程小结以及待完成的小游戏(第十二章)
12.9 小结在本章中,介绍了如何在一个进程中创建多个执行线程,每个线程共享着文件范围的变量。接着,介绍了线程对关键代码和数据的两种访问控制方法——使用信号量和互斥量。此后,介绍了如何控制线程的属性,特别介绍了如何才能将线程和主线程分离开来,使主线程无需等待它创建的子线程终止运行。在简单介绍完一个线程请求另一个线程结束运行以及接收端的线程如何处理这类请求之后,展示了一个有多个并发执行线程原创 2015-07-08 21:20:37 · 918 阅读 · 0 评论 -
俄罗斯方块
void show(int x, int y, int numb, int color){static int Table[row][column] = {0};int lastx = 0, lasty = 0;lastx = x + column / 2 * element;//设置下落位置为主界面中间位置x = lastx;//记忆得到中间坐标后,再把x的值赋为中间坐标la原创 2014-04-13 19:58:49 · 746 阅读 · 0 评论