13.6.2 使用FIFO的客户/服务器应用程序
作为学习FIFO的最后一部分内容,现在考虑怎样通过命名管道来编写一个非常简答的客户/服务器应用程序。用一个服务器进程来接受请求,对它们进行处理,最后把结果数据返回给发送请求的一方:客户。
如果想要允许多个客户进行都可以向服务器发送数据,假设被处理的数据可以被拆分为一个个数据块,每个的长度都小于PIPE_BUF字节。
因为服务器每次只能处...
分类:
系统相关 时间:
2015-07-16 09:49:59
阅读次数:
193
4.对FIFO进行读写操作
使用O_NONBLOCK模式会影响的对FIFO的read和write调用.
对一个空的,阻塞的FIFO(即没有用O_NONBLOCK标志打开)的read调用将等待,直到有数据可以读时才继续执行.与此相反,对一个空的,非阻塞的FIFO的read调用将立刻返回0字节.
对一个完全阻塞的FIFO的write调用将等待,直到数据可以写入时才继续执行.如果非阻塞的FIFO不...
分类:
系统相关 时间:
2015-07-15 09:33:43
阅读次数:
256
coredump时的信息:
(gdb) maintenance info program-spaces
*** Error in `gdb': free(): invalid pointer: 0x0000000003c6bcf0 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x7d1fd)[0x7fc875c0d1fd]
gdb(fi...
分类:
数据库 时间:
2015-07-14 17:54:45
阅读次数:
262
这一节,看一下list的iterator对象在内存的布局
1 #include
2
3 void init( std::list& lst )
4 {
5 for ( int i = 0; i < 0x10; i++ )
6 {
7 lst.push_back( i );
8 }
9 }
10
11 int get...
分类:
系统相关 时间:
2015-07-14 00:09:49
阅读次数:
207
13.5 父进程和子进程
在接下来的对pipe调用的研究中,将学习如何在子进程中运行一个与父进程完全不同的另外一个程序,而不是仅仅运行一个相同程序.使用exec调用来完成这一项工作.这里的一个难点是,通过exec调用的进程需要知道应该访问哪个文件描述符.在前面的例子中,因为子进程本身有file_pipes数据的一份副本(点击打开"fork复制进程映像"链接),所以这并不成为问题.但经过ex...
分类:
系统相关 时间:
2015-07-12 09:41:58
阅读次数:
169
13.4 pipe调用
在看过高级的popen函数之后,再来看看底层的pipe函数.通过这个函数在两个程序之间传递数据不需要启动一个shell来解释请求的命令.它同时提供了对读写数据的更多控制.
pipe函数的原型如下所示:
#include
int pipe(int file_descriptor[2]);参数:是一个由两个整数类型的文件描述符组成的数组.
返回值:该函数在数组中...
分类:
系统相关 时间:
2015-07-11 09:20:14
阅读次数:
287
13.3 将输出送往popen
看过捕获外部程序输出的例子后,再来看一个将输出发送到外部程序的示例程序popen2.c,它将数据通过管道送到另一个程序.在这里使用的是od(八进制)命令.
编写程序popen2.c,它非常类似popen1.c,唯一的不同是这个程序将数据写入管道,而不是从管道中读取.
/*******************************************...
分类:
系统相关 时间:
2015-07-10 09:37:43
阅读次数:
200
13.3.2 如何实现popen
请求popen调用运行一个程序时,它首先启动shell,即系统中的sh命令,然后将command字符串作为一个参数传递给它,这有两个效果,一个好,一个不好.
在linux中,所有的参数扩展都是由shell来完成的.所以,在启动程序之前先启动shell来分析命令字符串,就可以使各种shell扩展(如*.c所指的是哪些文件)在程序启动之前就全部完成.这个功能...
分类:
系统相关 时间:
2015-07-10 09:37:35
阅读次数:
196
在前面看过了一个vectorcoredump的例子,接触了vector的iterator,可以知道vector的iterator只有一个成员_M_current指向vector某一个元素.
先看一个例子:
1 #include
2
3 void init( std::vector& vec )
4 {
5 for ( int i = 0; i < 0x10; i++...
分类:
系统相关 时间:
2015-07-09 21:33:23
阅读次数:
154
12.8 多线程
之前,总是让程序的主线程仅仅创建一个线程,这节将演示如何在同一个程序中创建多个线程,然后如何以不同于其启动顺序将它们合并在一起。此外,还演示多线程编程时容易出现的时序问题.
编写程序thread8.c
/*************************************************************************
> File N...
分类:
编程语言 时间:
2015-07-07 22:52:38
阅读次数:
169