分类: LINUX
2010-07-21 08:47:42
Linux
在Linux 上配置文件描述符有点复杂。在编译squid 之前,你必须编辑系统include 文件中的一个,然后执行一些shell 命令。请首先编辑/usr/include/bits/types.h 文件,改变__FD_SETSIZE 的值:
#define _ _FD_SETSIZE 8192
下一步,使用这个命令增加内核文件描述符的限制:
# echo 8192 >; /proc/sys/fs/file-max
最后,增加进程文件描述符的限制,在你即将编译squid 的同一个shell 里执行:
sh# ulimit -Hn 8192
该命令必须以root 运行,仅仅运行在bash shell。不必重启机器。
使用这个技术,你必须在每一次系统启动后执行上述echo 和ulimit 命令,或者至少在squid 启动之前。假如你使用某个rc.d 脚本来启动squid,那是一个放置这些命令的好地方。
补充:
是个很小的正整数,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。
文件描述符的优点:兼容POSIX标准,许多和系统调用都依赖于它。
文件描述符的缺点:不能移植到UNIX以外的系统上去,也不直观。
基于文件描述符的输入输出函数:
open:打开一个文件,并指定访问该文件的方式,调用成功后返回一个文件描述符。
creat:打开一个文件,如果该文件不存在,则创建它,调用成功后返回一个文件描述符。
close:关闭文件,进程对文件所加的锁全都被释放。
read:从文件描述符对应的文件中读取数据,调用成功后返回读出的字节数。
write:向文件描述符对应的文件中写入数据,调用成功后返回写入的字节数。
ftruncate:把文件描述符对应的文件缩短到指定的长度,调用成功后返回0。
lseek:在文件描述符对应的文件里把文件指针设定到指定的位置,调用成功后返回新指针的位置。
fsync:将所有已写入文件中的数据真正写到磁盘或其他下层设备上,调用成功后返回0。
fstat:返回文件描述符对应的文件的相关信息,把结果保存在struct stat中,调用成功后返回0。
fchown:改变与打开文件相关联的所有者和所有组,调用成功后返回0。
fchmod:把文件描述符对应的文件的权限位改为指定的八进制模式,调用成功后返回0。
flock:用于向文件描述符对应的文件施加建议性锁,调用成功后返回0。
fcntl:既能施加建议性锁也能施加强制性锁,能建立记录锁、读取锁和写入锁,调用成功后返回0。
dup:复制文件描述符,返回没使用的文件描述符中最小的编号。
dup2:由用户指定返回的文件描述符的值,用来重新打开或重定向一个文件描述符。
select:同时从多个文件描述符读取数据或向多个文件描述符写入数据。