Linux C/C++编程FAQ系列 之四

Posted by c4pr1c3 on December 7, 2010

如何对文件“加锁”

查看Linux下可以同时打开的最大文件描述符数

查看select()所支持的最大文件描述符监视数目

提高select()机制实现的并发服务程序的并发连接数限制

Linux临时文件操作相关的C API


如何对文件“加锁”

(1)使用open系统调用,设置打开参数为O_EXCL。这种文件锁的方式打开的文件是对整个文件加锁。

(2)使用fcntl系统调用。这种文件锁的方式打开的文件是对文件分区域加锁。

(3)使用lockf函数。这种文件锁的方式打开的文件是对文件分区域加锁。

查看Linux下可以同时打开的最大文件描述符数

cat /proc/sys/fs/file-max

这个值和当前系统的内存大小有关

查看select()所支持的最大文件描述符监视数目

一般是在/usr/include/bits/typesizes.h中定义的宏__FD_SETSIZE

#define	__FD_SETSIZE		1024

</p>

提高select()机制实现的并发服务程序的并发连接数限制

方法(1):修改__FD_SETSIZE定义,重新编译内核

方法(2):采用多进程方案(参考apache的1.3.x的并发实现)

Linux临时文件操作相关的C API

#include <stdio.h>

char *tmpnam(char *s); /* 生成一个系统内唯一的临时文件名 */

FILE *tmpfile(void);   /*  生成一个系统内唯一的临时文件名并打开这个文件 */

#include <stdlib.h>

char *mktemp(char *template);

int mkstemp(char *template);  /* 创建一个系统内唯一的临时文件,权限为0600 */

int mkostemp (char *template, int flags); /* 创建一个系统内唯一的临时文件,可以通过flags参数指定类似open函数的文件打开方式 */

NOTE: 通过fileno函数可以将FILE *类型的文件流转换为底层的file descriptor。这在很多的文件操作函数中都会用到该函数。