- 论坛徽章:
- 0
|
本帖最后由 dl0622 于 2011-01-14 21:49 编辑
我这个程序主要是想占用2G内存空间,等待usr2信号到达后才写进另一个文件。- #include<stdio.h>
- #include<stdlib.h>
- #include<signal.h>
- #include<sys/types.h>
- #include<sys/wait.h>
- #include <errno.h>
- #define BUF 2*1024*1024*1024
- #define BUF_WRITE 2*1024*1024*1024-128
- main()
- {
- FILE *fp;
- FILE *wt;
- char *buf=malloc(BUF);
- pid_t pid;
- if ( (fp=fopen ("./data_read.txt", "r+")) == NULL )
- {
- printf("Fail to open file\n");
- exit(-1);
- }
- wt = fopen("./data_write.txt", "w");
- if (wt == NULL)
- {
- fprintf(stderr, "I/O (fopen) (data_write.txt) error! %d--%s\n", errno, strerror(errno));
- return -1;
- }
- if( setvbuf(wt, buf, _IOFBF, BUF) < 0 ) // 设置流fp为全缓冲,缓冲区指向buf,大小为2G
- {
- fprintf(stderr, "I/O (setvbuf size=%d) error! %d--%s\n", BUF, errno, strerror(errno));
- }
- int nRet = fread(buf, sizeof(char), BUF_WRITE, fp); // 从流中读取内容存放到变量ch中
- if ( nRet < 0 )
- {
- fprintf(stderr, "I/O (fread) error! %d--%s\n", errno, strerror(errno));
- return -1;
- }
- if(kill(pid,SIGUSR2) != 0)
- {
- int nRet = fwrite(buf, sizeof(char), BUF_WRITE, wt);
- if ( nRet < 0 )
- {
- fprintf(stderr, "I/O (fwrite) error! %d--%s\n", errno, strerror(errno));
- return -1;
- }
- buf = NULL;
- }
- free(buf);
- //printf("%d %d %d\n", buf[0], buf[1], buf[4095]);
- }
复制代码 运行时报错:
I/O (setvbuf size=-214748364 error! 12--Not enough space
Segmentation fault (core dumped)
但是内存是足够的。 |
|