大佬教程收集整理的这篇文章主要介绍了c – SIGXFSZ是由内核发送的,除非有什么内容打印到stdout?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在学习“Unix环境下的高级编程”,并且在第10章的练习11中遇到了问题.
在我的程序中,我将RLIMIT_FSIZE设置为1024.
所以当写入试图超过该限制时,内核应该将SIGXFSZ发送到我的程序.
但我发现SIGXFSZ不发送,除非打印到stdout的东西.
这是我的代码:
#include <>dio.h>
#include %s\n",signo,strsignal(signo));
}
int main(int argc,char* argv[])
{
int n;
char buf[BUFFSIZE];
struct rlimit fsizeLimit;
fsizeLimit.rlim_cur=1024;
fsizeLimit.rlim_max=1024;
if(setrlimit(RLIMIT_FSIZE,&fsizeLimit) < 0)="" {="" perror("setrlimit="" error");="" exit(-1);="" }="" if(signal(sigxfsz,xfsz_handler)="=SIG_ERR)" {="" fprintf(stderr,"set="" signal="" handler="" error="" for="" %d\n",sigxfsz);="" exit(-1);="" }="" printf("what="" ever\n");="" we="" need="" this="" to="" get="" sigxfsz="" sent="" */="" while="" (="" (n="read(STDIN_FILENO,buf,BUFFSIZE))" >="" 0)="" {="" int="" bytewrite="0;" if="" (="" (bytewrite="write(STDOUT_FILENO,n))">< 0)="" {="" perror("write="" error");="" exit(-1);="" }="" if(bytewrite!="n)" {="" fprintf(stderr,"bytewrite="%d,n=%d\n",byteWrite,n);" exit(-1);="" }="" }="" if=""><0) {="" perror("read="" error");="" exit(-1);="" }="" return="" 0;="" }="">0)>
如果我在代码中注释掉以下行,内核将不会传输SIGXFSZ.
printf("What ever . . . \n");
为什么会这样?提前致谢.
[root@luaDevelopment ex11]# ./myCopy < oot/workspace/advanceprogrammingintheunixenvironment.20140627.tar.bz2="" >aa.tar.bz2="" bytewrite="24,n=100" [root@luadevelopment="" ex11]#="" make="" gcc="" -o="" mycopy="" mycopy.c="" -std="gnu99" -i../../lib/="" -l../../lib/="" -lch10="" [root@luadevelopment="" ex11]#="" ./mycopy="">< oot/workspace/advanceprogrammingintheunixenvironment.20140627.tar.bz2="" >aa.tar.bz2="" bytewrite="24,n=100" 25,file="" size="" limit="" exceeded="" [root@luadevelopment="" ex11]#="">
以上是大佬教程为你收集整理的c – SIGXFSZ是由内核发送的,除非有什么内容打印到stdout?全部内容,希望文章能够帮你解决c – SIGXFSZ是由内核发送的,除非有什么内容打印到stdout?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。