Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – SIGXFSZ是由内核发送的,除非有什么内容打印到stdout?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我正在学习“Unix环境下的高级编程”,并且在第10章的练习11中遇到了问题.在我的程序中,我将RLIMIT_FSIZE设置为1024.所以当写入试图超过该限制时,内核应该将SIGXFSZ发送到我的程序.但我发现SIGXFSZ不发送,除非打印到stdout的东西.这是我的代码:#include <unistd.h> #include <st

我正在学习“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;="" }="">

如果我在代码中注释掉以下行,内核将不会传输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]#="">
最佳答案
user3693690在本书附录C中找到了答案:

如果这是Linux内核用来处理SIGXFSZ的方式,那就这样吧,但我觉得这很奇怪.

大佬总结

以上是大佬教程为你收集整理的c – SIGXFSZ是由内核发送的,除非有什么内容打印到stdout?全部内容,希望文章能够帮你解决c – SIGXFSZ是由内核发送的,除非有什么内容打印到stdout?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: