linux程序设计
文章平均质量分 88
mathZHA
这个作者很懒,什么都没留下…
展开
-
linux程序设计——网络信息(第十五章)
test原创 2015-07-23 23:56:24 · 592 阅读 · 0 评论 -
linux程序设计——个人总结
linux程序设计——个人总结 到今天为止,《linux程序设计》学习基本完成了。从五月下旬开始接触linux,学习安装Ubuntu14.04,六月份开始学习《linux程序设计》,实习考试之余花费了足足快两个月的时间,看完大部分章节,敲了一些代码。 仔细看过的章节:第一章入门、第二章shell程序设计、第三章文件操作、第四章linux环境、第七章数据管理、第八章MySQL、第原创 2015-07-27 15:04:19 · 3338 阅读 · 0 评论 -
linux程序设计——用信号量进行同步(第十二章)
12.5 同步在上一节中,看到两个线程同时执行的情况,但采用的在它们之间切换的方法是非常笨拙并且没有效率的.幸运的是,专门有一组设计好的函数提供了更好的控制线程执行和访问代码临界区域的方法.在本节学习两种基本的方法.一种是信号量,它的作用如同看守一段代码的看门人;另一种是互斥量,它的作用如同保护代码段的一个互斥设备.这两种方法很类似,事实上,它们可以互相通过对方来实现.但在实际应原创 2015-07-05 20:12:28 · 780 阅读 · 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程序设计——文件操作(第三章)
第三章 文件操作3.1 linux文件结构与UNIX一样,linux环境中的文件具有特别重要的意义,因为它们为操作系统服务和设备提供了一个简单而一致的接口。在linux中,一切都是文件。这意味着,通常程序可以像使用文件那样使用磁盘文件、串行口、打印机等等。目录也是文件,但它是一种特殊类型的文件。在现代UNIX(包括linux)版本中,即使是超级用户可能也不再被允许直接对目录进原创 2015-06-04 18:08:15 · 1133 阅读 · 0 评论 -
linux程序设计——文件锁定(第七章)
7.2 文件锁定这篇为linux的文件锁定,代码在文件锁定代码下载。文件锁定是多用户、多任务操作系统中一个非常重要的组成部分。程序经常需要共享数据,而这通常是通过文件来实现的。因此,对于这些程序来说,建立某种控制文件的方式就非常重要。只有这样,文件才可以通过一种安全的方式更新,或者说,当一个程序正在对文件进行写操作时,文件就会进入一个暂时状态,在这个状态下,如果另外一个程序尝试读这个文件,它就原创 2015-06-15 21:01:14 · 892 阅读 · 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程序设计——用互斥量进行同步(第十二章)
12.5.2 用互斥量进行同步另一种在多线程程序中的同步访问方法是使用互斥量.它允许程序员锁住某个对象,使得每次只能有一个线程访问它.为了控制对关键代码的访问,必须在进入这段代码之前锁住一个互斥量,然后在完成操作之后解锁它.用于互斥量的基本函数和用于信号量的函数非常相似,它们的定义如下所示:#include int pthread_mutex_init(pthread_mute原创 2015-07-06 11:27:38 · 750 阅读 · 0 评论 -
linux程序设计——调试(第十章)
第十章 调试10.1 错误类型有几种原因会造成程序的缺陷,针对每种原因,都有下面的一些建议的方法来查找和纠正功能定义错误:如果程序的功能被错误地定义了,它就肯定不能够完成预定的工作.所以在开始程序设计之前,必须确认知道并理解这个程序究竟是用来干什么的.认真分析用户需求并加强和用户之间的沟通,有助于查找和纠正许多程序功能定义方面的错误.设计规划错误:无论程序规模的大小,在创建它原创 2015-06-29 21:27:51 · 632 阅读 · 0 评论 -
linux程序设计——多个源文件的问题,makefile的语法(第九章)
第九章 开发工具本章介绍一些linux系统中的程序开发工具,其中一些工具也可以在UNIX系统中使用.linux系统除提供开发人员必须的编译器和调试器外,还提供一组工具,其中每个都可以完成一件独立的任务,并且允许开发人员将它们创造性地组合在一起,而这种组合能力也是linux从UNIX的哲学体系中继承而来的.9.1 多个源文件带来的问题在编写小程序时,许多人都会在编辑完源文件后重新编译所有原创 2015-06-26 20:50:41 · 1625 阅读 · 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程序设计——线程的属性(第十二章)
12.6 线程的属性在前面的所有程序示例中,都在程序退出之前用pthread_join对线程再次进行同步,如果想让线程向创建它的线程返回数据就需要这样做.但有时,也有这种情况,既不需要第二个线程向主线程返回信息,也不想让主线程等待它的结束.假设在主线程继续为用户提供服务的同时创建了第二个线程,新线程的作用是将用户正在编辑的数据文件进行备份存储.备份工作结束后,第二个线程就可以直接终止原创 2015-07-06 21:32:27 · 613 阅读 · 0 评论 -
linux程序设计——shell程序设计(第二章)
这篇介绍shell的语法,包括shell中的变量,条件判断,控制结构和函数。此外,这篇的所有命令都在变量条件控制结构函数。下一篇是命令和命令的执行。Shell的语法条件所有程序设计语言的基础都是对条件的进行测试判断,并根据不同测试结果采取不同行动。一个shell脚本能够对任何可以从命令行上调用的命令的退出码进行测试,其中也包括自己编写的脚本程序。这也就是要在所有自己编写的脚本程序的原创 2015-06-02 16:49:20 · 995 阅读 · 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程序设计——把管道用作标准输入和输出(第十三章)
13.5.1 管道关闭后的读操作接下来先研究一下打开的文件描述符,此前一直采取的是让读进程读取一些数据然后直接退出的方式,并假设linux会把清理文件当作是在进程结束时应该做的工作的一部分.但大多数从标准输入读取数据的程序采用的确实与此前的例子非常不同的另外一种做法.通常,它们并不直到有多少数据需要读取,所以往往采用循环的方法,读取数据--处理数据--读取更多的数据,直到没有数据可读原创 2015-07-12 23:11:00 · 3450 阅读 · 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 评论 -
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 评论 -
linux程序设计——使用FIFO的客户/服务器的应用程序(第十三章)
13.6.2 使用FIFO的客户/服务器应用程序作为学习FIFO的最后一部分内容,现在考虑怎样通过命名管道来编写一个非常简答的客户/服务器应用程序。用一个服务器进程来接受请求,对它们进行处理,最后把结果数据返回给发送请求的一方:客户。如果想要允许多个客户进行都可以向服务器发送数据,假设被处理的数据可以被拆分为一个个数据块,每个的长度都小于PIPE_BUF字节。因为服务器每次只能处原创 2015-07-15 23:33:05 · 1461 阅读 · 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 · 5698 阅读 · 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程序设计——pipe调用在两进程之间通信(第十三章)
13.4 pipe调用在看过高级的popen函数之后,再来看看底层的pipe函数.通过这个函数在两个程序之间传递数据不需要启动一个shell来解释请求的命令.它同时提供了对读写数据的更多控制.pipe函数的原型如下所示:#include int pipe(int file_descriptor[2]);参数:是一个由两个整数类型的文件描述符组成的数组.返回值:该函数在数组中原创 2015-07-10 18:51:46 · 3062 阅读 · 0 评论 -
linux程序设计——管道输出数据到popen(第十三章)
13.3 将输出送往popen看过捕获外部程序输出的例子后,再来看一个将输出发送到外部程序的示例程序popen2.c,它将数据通过管道送到另一个程序.在这里使用的是od(八进制)命令.编写程序popen2.c,它非常类似popen1.c,唯一的不同是这个程序将数据写入管道,而不是从管道中读取./*******************************************原创 2015-07-09 20:31:17 · 1760 阅读 · 0 评论 -
linux程序设计——进程和信号总结(第十一章)
11.4.2 信号集头文件signal.h定义了类型sigset_t和用来处理信号集的函数.sigaction和其他函数.sigaction和其他函数将用这些信号集来修改进程在接收到信号时的行为.#include int sigaddset(sigset_t *set, int signo);int sigemptyset(sigset_t *set);int sig原创 2015-07-04 18:38:44 · 603 阅读 · 0 评论 -
linux程序设计——进程和信号(第十一章)
11.4.1 发送信号进程可以通过调用kill函数向包括它本身在内的其他进程发送一个信号.如果程序没有发送该信号的权限,对kill函数的调用就将失败,失败的常见原因是目标进程由另一个用户所拥有.这个函数和同名的shell命令完成相同的功能,它的定义如下所示:#include #include int kill(pid_t pid, int sig);kill函数把参数sig给定原创 2015-07-03 21:33:05 · 978 阅读 · 0 评论 -
linux程序设计——make命令和makefile文件(第九章)
9.2 make命令和makefile文件9.2.6 内置规则make命令本身带有大量的内置规则,它们可以极大地简化makefile文件的内容,尤其在拥有许多源文件时更是如此.为了测试这些内置规则,下面创建文件foo.c,他是一个传统的"hello world"程序:#include #include int main(){ printf("hello world\n原创 2015-06-28 21:10:42 · 627 阅读 · 0 评论 -
linux程序设计——make命令和makefile文件(第九章)
9.2 make命令和makefile文件9.2.3 makefile文件中的注释makefile文件中的注释以#号开头,一直延续到这一行的结束.和C语言的源文件注释一样,makefile文件中的注释可以帮助程序的编写者以及其他人理解最初编写这个文件的目的.9.2.4 makefile文件中的宏mkaefile文件允许使用宏以一种更通用的格式来书写它们.通过语句MACRONAM原创 2015-06-27 18:57:10 · 610 阅读 · 0 评论 -
linux程序设计——数据报(第十五章)
15.5 数据报在本章中,重点介绍了如何编写与客户之间维持连接的应用程序.使用面向连接的TCP套接字来完成这一工作.但在某些情况下,在程序中花费时间来建立和维持一个套接字连接是不必要的.早先,在程序getdate.c中所使用的daytime服务就是一个很好的例子,首先创建一个套接字,然后建立连接,读取一个响应,读取一个响应,最后关闭连接.在这一过程中,使用了很多操作步骤,仅仅为了获取原创 2015-07-26 23:54:19 · 752 阅读 · 0 评论 -
linux程序设计——select调用和多客户(第十五章)
15.4.1 select系统调用在编写linux应用程序时,经常会遇到需要检查好几个输入的状态才能确定下一步行动的情况.例如,像终端仿真器这样的通信程序,需要有效地同时读取键盘和串行口.如果是在一个单用户系统中,运行一个"忙等待"循环还是可以接受的,它不停地扫描输入设置看是否有数据,如果有数据到达就读取它,但这种做法很消耗CPU的时间.select系统调用允许程序同时在多个底层文件原创 2015-07-26 23:32:20 · 817 阅读 · 0 评论 -
linux程序设计——进程和信号(第十一章)
11.4 信号量信号是UNIX和linux系统响应某些条件而产生的一个事件.接收到该信号的进程会相应地采取一些行动.用术语生成(raise)表示一个信号的产生,使用术语捕获(catch)表示接收一个信号.信号是由于某些错误条件而生成的,例如内存段冲突,浮点处理器错误或非法指令等.它们由shell和终端处理器生成来引起中断,它们还可以作为在进程间传递消息或修改行为的一种方式,明确地由一个进原创 2015-07-02 21:31:50 · 774 阅读 · 0 评论 -
linux程序设计——多客户(第十五章)
15.4 多客户到目前为止,本章一直介绍的是,如果用套接字来实现本地的和跨网络的客户/服务器系统.一旦连接建立,套接字连接的行为就类似于打开的底层文件描述符,而且在很多方面类似于双向管道.现在考虑有多个客户同时连接一个服务器的情况.服务器程序在接受来自客户的一个新连接时,会创建出一个新的套接字,而原先的监听套接字将被保留以继续监听以后的连接.如果服务器不能立刻接受后来的连接,它们将被原创 2015-07-25 23:29:22 · 703 阅读 · 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程序设计——套接字选项(第十五章)
现在可以改进客户程序,使它可以连接到任何有名字的主机,这次不是连接到示例服务器,而是连接到一个标准服务,这样就可以演示端口号的提取操作了.大多数UNIX和一些linux系统都有一项标准服务daytime,它提供系统的日期和时间.客户可以连接到这个服务来查看服务器的当前日期和时间.下面就是完成这一工作的客户程序getdate.c编写程序getdate.c/****************原创 2015-07-25 00:02:34 · 805 阅读 · 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 评论