免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6108 | 回复: 5
打印 上一主题 下一主题

[函数] socket 的 read send函数的缓存怎么更新更新? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-22 14:04 |只看该作者 |倒序浏览
socket 的read函数,如果本地缓存大于read读取的字节数。用read读取时,读完本次后再用read读取该缓存,读取的是后面的吗?不会重复读取?read会不断地把缓存内容向前移动?

while(1)
{
       recv();
}
就行?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2007-08-22 14:29 |只看该作者
一般情况下是读取完了.缓存中的数据就删掉了..
不过有一个recv 第四个参数可以设置不删除..
我看unix环境高级编程中的意思好像是socket的缓存区跟文件不一样,它没有类似文件指针的东西向前移.
读完一块数据后就删掉了.再读就是新的了..如果你不删.则可以重复读取.

论坛徽章:
0
3 [报告]
发表于 2007-08-22 16:17 |只看该作者
谢谢!我看unix环境高级编程中怎么根本就没有网络编程这一章?

目      录
译者序
译者简介
前言
第1章   UNIX基础知识        1
1.1   引言        1
1.2   登录        1
1.2.1   登录名        1
1.2.2   shell        1
1.3   文件和目录        2
1.3.1   文件系统        2
1.3.2   文件名        2
1.3.3   路径名        2
1.3.4   工作目录        4
1.3.5   起始目录        4
1.4   输入和输出        5
1.4.1   文件描述符        5
1.4.2   标准输入、标准输出和标准
           出错        5
1.4.3   不用缓存的I/O        5
1.4.4   标准I/O        6
1.5   程序和进程        7
1.5.1   程序        7
1.5.2   进程和进程ID        7
1.5.3   进程控制        7
1.6   ANSI C        9
1.6.1   函数原型        9
1.6.2   类属指针        9
1.6.3   原始系统数据类型        10
1.7   出错处理        10
1.8   用户标识        11
1.8.1   用户ID        11
1.8.2   组ID        12
1.8.3   添加组ID        12
1.9   信号        12
1.10   UNIX时间值        14
1.11   系统调用和库函数        14
1.12   小结        16
习题        16
第2章   UNIX标准化及实现        17
2.1   引言        17
2.2   UNIX标准化        17
2.2.1   ANSI C        17
2.2.2   IEEE POSIX        18
2.2.3   X/Open XPG3        19
2.2.4   FIPS        19
2.3   UNIX实现        19
2.3.1   SVR4        20
2.3.2   4.3+BSD        20
2.4   标准和实现的关系        21
2.5   限制        21
2.5.1   ANSI C限制        22
2.5.2   POSIX限制        22
2.5.3   XPG3限制        24
2.5.4   sysconf、pathconf 和fpathconf
函数        24
2.5.5   FIPS 151-1要求        28
2.5.6   限制总结        28
2.5.7   未确定的运行时间限制        29
2.6   功能测试宏        32
2.7   基本系统数据类型        32
2.8   标准之间的冲突        33
2.9   小结        34
习题        34
第3章   文件I/O        35
3.1   引言        35
3.2   文件描述符        35
3.3   open函数        35
3.4   creat函数        37
3.5   close函数        37
3.6   lseek函数        38
3.7   read函数        40
3.8   write函数        41
3.9   I/O的效率        41
3.10   文件共享        42
3.11   原子操作        45
3.11.1   添加至一个文件        45
3.11.2   创建一个文件        45
3.12   dup和dup2函数        46
3.13   fcntl函数        47
3.14   ioctl函数        50
3.15   /dev/fd        51
3.16   小结        52
习题        52
第4章   文件和目录        54
4.1   引言        54
4.2   stat, fstat和lstat函数        54
4.3   文件类型        55
4.4   设置-用户-ID和设置-组-ID        57
4.5   文件存取许可权        58
4.6   新文件和目录的所有权        60
4.7   access函数        60
4.8   umask函数        62
4.9   chmod和fchmod函数        63
4.10   粘住位        65
4.11   chown, fchown和 lchown函数        66
4.12   文件长度        67
4.13   文件截短        68
4.14   文件系统        69
4.15   link, unlink, remove和rename
         函数        71
4.16   符号连接        73
4.17   symlink 和readlink函数        76
4.18   文件的时间        76
4.19   utime函数        78
4.20   mkdir和rmdir函数        79
4.21   读目录        80
4.22   chdir, fchdir和getcwd函数        84
4.23   特殊设备文件        86
4.24   sync和fsync函数        87
4.25   文件存取许可权位小结        88
4.26   小结        89
习题        89
第5章   标准I/O库        91
5.1   引言        91
5.2   流和FILE对象        91
5.3   标准输入、标准输出和标准出错        91
5.4   缓存        91
5.5   打开流        94
5.6   读和写流        96
5.6.1   输入函数        96
5.6.2   输出函数        97
5.7   每次一行I/O        98
5.8   标准I/O的效率        99
5.9   二进制I/O        100
5.10   定位流        102
5.11   格式化I/O        103
5.11.1   格式化输出        103
5.11.2   格式化输入        103
5.12   实现细节        104
5.13   临时文件        105
5.14   标准I/O的替代软件        108
5.15   小结        108
习题        108
第6章   系统数据文件和信息        110
6.1   引言        110
6.2   口令文件        110
6.3   阴影口令        112
6.4   组文件        113
6.5   添加组ID        114
6.6   其他数据文件        115
6.7   登录会计        116
6.8   系统标识        116
6.9   时间和日期例程        117
6.10   小结        121
习题        121
第7章   UNIX进程的环境        122
7.1   引言        122
7.2   main 函数        122
7.3   进程终止        122
7.3.1   exit和_exit函数        122
7.3.2   atexit函数        124
7.4   命令行参数        125
7.5   环境表        126
7.6   C程序的存储空间布局        126
7.7   共享库        127
7.8   存储器分配        128
7.9   环境变量        130
7.10   setjmp 和longjmp函数        132
7.10.1   自动、寄存器和易失变量        134
7.10.2   自动变量的潜在问题        136
7.11   getrlimit 和setrlimit函数        136
7.12   小结        139
习题        140
第8章   进程控制        141
8.1   引言        141
8.2   进程标识        141
8.3   fork函数        142
8.4   vfork 函数        145
8.5   exit函数        147
8.6   wait和waitpid函数        148
8.7   wait3和wait4函数        152
8.8   竞态条件        153
8.9   exec函数        156
8.10   更改用户ID和组ID        160
8.10.1   setreuid 和setregid函数        162
8.10.2   seteuid和 setegid函数        163
8.10.3   组ID        163
8.11   解释器文件        164
8.12   system函数        167
8.13   进程会计        171
8.14   用户标识        175
8.15   进程时间        176
8.16   小结        178
习题        178
第9章   进程关系        180
9.1   引言        180
9.2   终端登录        180
9.2.1   4.3+BSD终端登录        180
9.2.2   SVR4终端登录        182
9.3   网络登录        182
9.3.1   4.3+BSD网络登录        182
9.3.2   SVR4网络登录        183
9.4   进程组        183
9.5   对话期        184
9.6   控制终端        185
9.7   tcgetpgrp 和tcsetpgrp函数        187
9.8   作业控制        187
9.9   shell执行程序        189
9.10   孤儿进程组        193
9.11   4.3+BSD实现        195
9.12   小结        197
习题        197
第10章   信号        198
10.1   引言        198
10.2   信号的概念        198
10.3   signal函数        203
10.3.1   程序起动        205
10.3.2   进程创建        206
10.4   不可靠的信号        206
10.5   中断的系统调用        207
10.6   可再入函数        209
10.7   SIGCLD语义        211
10.8   可靠信号术语和语义        213
10.9   kill和raise函数        213
10.10   alarm和pause函数        214
10.11   信号集        219
10.12   sigprocmask 函数        220
10.13   sigpending函数        222
10.14   sigaction函数        223
10.15   sigsetjmp 和siglongjmp函数        226
10.16   sigsuspend函数        229
10.17   abort函数        234
10.18   system函数        235
10.19   sleep函数        240
10.20   作业控制信号        241
10.21   其他特征        243
10.21.1   信号名字        243
10.21.2   SVR4信号处理程序的附
       加参数        244
10.21.3   4.3+BSD信号处理程序的附
加参数        244
10.22   小结        244
习题        244
第11章   终端I/O        246
11.1   引言        246
11.2   综述        246
11.3   特殊输入字符        250
11.4   获得和设置终端属性        254
11.5   终端选择标志        254
11.6   stty命令        258
11.7   波特率函数        259
11.8   行控制函数        260
11.9   终端标识        260
11.10   规范方式        263
11.11   非规范方式        266
11.12   终端的窗口大小        270
11.13   termcap, terminfo和 curses        271
11.14   小结        272
习题        272
第12章   高级I/O        273
12.1   引言        273
12.2   非阻塞I/O        273
12.3   记录锁        275
12.3.1   历史        276
12.3.2   fcntl记录锁        276
12.3.3   锁的隐含继承和释放        280
12.3.4   4.3+BSD的实现        281
12.3.5   建议性锁和强制性锁        284
12.4   流        288
12.4.1   流消息        289
12.4.2   putmsg和putpmsg函数        290
12.4.3   流ioctl操作        291
12.4.4   write至流设备        294
12.4.5   写方式        294
12.4.6   getmsg和getpmsg函数        294
12.4.7   读方式        295
12.5   I/O多路转接        296
12.5.1   select函数        298
12.5.2   poll函数        301
12.6   异步I/O        303
12.6.1   SVR4        303
12.6.2   4.3+BSD        303
12.7   readv和writev函数        304
12.8   readn和writen函数        306
12.9   存储映射I/O        307
12.10   小结        311
习题        311
第13章   精灵进程        312
13.1   引言        312
13.2   精灵进程的特征        312
13.3   编程规则        313
13.4   出错记录        314
13.4.1   SVR4流log驱动程序        315
13.4.2   4.3+BSD syslog设施        316
13.5   客户机-服务器模型        319
13.6   小结        319
习题        319
第14章   进程间通信        320
14.1   引言        320
14.2   管道        320
14.3   popen和pclose函数        325
14.4   协同进程        330
14.5   FIFO        333
14.6   系统V IPC        335
14.6.1   标识符和关键字        336
14.6.2   许可权结构        337
14.6.3   结构限制        337
14.6.4   优点和缺点        337
14.7   消息队列        338
14.8   信号量        342
14.9   共享存储        346
14.10   客户机-服务器属性        351
14.11   小结        353
习题        353
第15章   高级进程间通信        355
15.1   引言        355
15.2   流管道        355
15.3   传送文件描述符        358
15.3.1   SVR4        360
15.3.2   4.3BSD        361
15.3.3   4.3+BSD        364
15.4   open服务器第1版        366
15.5   客户机-服务器连接函数        371
15.5.1   SVR4        372
15.5.2   4.3+BSD        375
15.6   open服务器第2版        378
15.7   小结        385
习题        385
第16章   数据库函数库        386
16.1   引言        386
16.2   历史        386
16.3   函数库        386
16.4   实现概述        388
16.5   集中式或非集中式        390
16.6   并发        391
16.6.1   粗锁        391
16.6.2   细锁        391
16.7   源码        392
16.8   性能        409
16.8.1   单进程的结果        410
16.8.2   多进程的结果        410
16.9   小结        412
习题        412
第17章   与PostScript打印机通信        413
17.1   引言        413
17.2   PostScript通信机制        413
17.3   假脱机打印        415
17.4   源码        417
17.5   小结        434
习题        434
第18章   调制解调器拨号器        435
18.1   引言        435
18.2   历史        435
18.3   程序设计        436
18.4   数据文件        437
18.5   服务器设计        439
18.6   服务器源码        439
18.7   客户机设计        463
18.7.1   终端行规程        463
18.7.2   一个进程还是两个进程        464
18.8   客户机源码        465
18.9   小结        474
习题        474
第19章   伪终端        476
19.1   引言        476
19.2   概述        476
19.2.1   网络登录服务器        477
19.2.2   script程序        478
19.2.3   expect程序        479
19.2.4   运行协同进程        479
19.2.5   观看长时间运行程序的输出        479
19.3   打开伪终端设备        480
19.3.1   SVR4        481
19.3.2   4.3+BSD        482
19.4   pty_fork函数        484
19.5   pty程序        486
19.6   使用pty程序        489
19.6.1   utmp文件        489
19.6.2   作业控制交互        489
19.6.3   检查长时间运行程序的输出        491
19.6.4   script程序        491
19.6.5   运行协同进程        492
19.6.6   用非交互模式驱动交互式
             程序        492
19.7   其他特性        494
19.7.1   打包模式        494
19.7.2   远程模式        494
19.7.3   窗口大小变化        495
19.7.4   信号发生        495
19.8   小结        495
习题        495
附录A   函数原型        497
附录B   其他源代码        512
附录C   习题答案        518
参考书目        536

[ 本帖最后由 wang9736 于 2007-8-22 16:19 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-08-22 17:55 |只看该作者
楼主真行,居然把目录给列出来了,你这是第一版吧,看了一下目录,确实没有发现。
网络Socket属于进程间通信的一种,在第二版有讲到,不过不怎么详细,如果楼主想详细了解,看一下作者Richard Stevens的另外关于网络编程的书,非常详细。
read不会重复读取信息,由于是数据流,所以跟普通文件数据还是有不一样的地方。

论坛徽章:
0
5 [报告]
发表于 2007-08-22 21:28 |只看该作者
linux下的内核缓存有260K左右  用户层的缓存读了一次之后就被冲洗了的  如果不及时读取的话会有粘合问题,你可以将缓存设置成你需要数据的大小,这样就不会有数据丢失的问题了

论坛徽章:
0
6 [报告]
发表于 2007-08-30 11:45 |只看该作者
谢谢回答 用setsockopt  函数可以设置缓存大小
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP