当前位置: 技术问答>linux和unix
修改RLIMIT_FSIZE的值的问题
来源: 互联网 发布时间:2016-03-22
本文导语: 我写了这个程序为什么捕捉不到信号呢? #include #include #include #include #include #include void sig_int(int t) { printf("heren"); } int main() { int fd; struct...
我写了这个程序为什么捕捉不到信号呢?
#include
#include
#include
#include
#include
#include
void
sig_int(int t)
{
printf("heren");
}
int
main()
{
int fd;
struct rlimit limit, limit2;
if(signal(SIGXFSZ, sig_int) == SIG_ERR)
printf("signal errorn");
limit2.rlim_cur = 1;
limit2.rlim_max = 2;//RLIM_INFINITY;
if(setrlimit(RLIMIT_FSIZE ,&limit2) != 0)
printf("set rlimit errorn");
fd = open("test", O_WRONLY ¦O_TRUNC);
write(fd, "12", 2);
}
不是说超过软限制值就发送SIGXFSZ信号的么?test文件里面的确就只有1个字符,但是就是不发送信号。
平台是:Redhat linux ES3
#include
#include
#include
#include
#include
#include
void
sig_int(int t)
{
printf("heren");
}
int
main()
{
int fd;
struct rlimit limit, limit2;
if(signal(SIGXFSZ, sig_int) == SIG_ERR)
printf("signal errorn");
limit2.rlim_cur = 1;
limit2.rlim_max = 2;//RLIM_INFINITY;
if(setrlimit(RLIMIT_FSIZE ,&limit2) != 0)
printf("set rlimit errorn");
fd = open("test", O_WRONLY ¦O_TRUNC);
write(fd, "12", 2);
}
不是说超过软限制值就发送SIGXFSZ信号的么?test文件里面的确就只有1个字符,但是就是不发送信号。
平台是:Redhat linux ES3
|
有可能是write()内部对limit做了检查吧。
write(3, "12", 2) = 1
我用了
lseek(fd, 4, SEEK_CUR);
就会有SIGXFSZ信号
write(3, "12", 2) = 1
我用了
lseek(fd, 4, SEEK_CUR);
就会有SIGXFSZ信号