winlin

Merge branch 'srs.master'

1 -/**  
2 -g++ pipe_fds.cpp -g -O0 -o pipe_fds  
3 -  
4 -About the limits:  
5 -[winlin@dev6 srs]$ ulimit -n  
6 - 1024  
7 -[winlin@dev6 srs]$ sudo lsof -p 21182  
8 - pipe_fds 21182 winlin 0u CHR 136,4 0t0 7 /dev/pts/4  
9 - pipe_fds 21182 winlin 1u CHR 136,4 0t0 7 /dev/pts/4  
10 - pipe_fds 21182 winlin 2u CHR 136,4 0t0 7 /dev/pts/4  
11 - pipe_fds 21182 winlin 3r FIFO 0,8 0t0 464543 pipe  
12 - pipe_fds 21182 winlin 1021r FIFO 0,8 0t0 465052 pipe  
13 - pipe_fds 21182 winlin 1022w FIFO 0,8 0t0 465052 pipe  
14 -So, all fds can be open is <1024, that is, can open 1023 files.  
15 -The 0, 1, 2 is opened file, so can open 1023-3=1020files,  
16 -Where 1020/2=512, so we can open 512 pipes.  
17 -*/  
18 -#include <stdio.h>  
19 -#include <stdlib.h>  
20 -#include <unistd.h>  
21 -#include <errno.h>  
22 -#include <string.h>  
23 -  
24 -int main(int argc, char** argv)  
25 -{  
26 - if (argc <= 1) {  
27 - printf("Usage: %s <nb_pipes>\n"  
28 - " nb_pipes the pipes to open.\n"  
29 - "For example:\n"  
30 - " %s 1024\n", argv[0], argv[0]);  
31 - exit(-1);  
32 - }  
33 -  
34 - int nb_pipes = ::atoi(argv[1]);  
35 - for (int i = 0; i < nb_pipes; i++) {  
36 - int fds[2];  
37 - if (pipe(fds) < 0) {  
38 - printf("failed to create pipe. i=%d, errno=%d(%s)\n",  
39 - i, errno, strerror(errno));  
40 - break;  
41 - }  
42 - }  
43 -  
44 - printf("Press CTRL+C to quit, use bellow command to show the fds opened:\n");  
45 - printf(" sudo lsof -p %d\n", getpid());  
46 - sleep(-1);  
47 - return 0;  
48 -}