题目:
#include
#define BUFFSIZE 100
static void
sig_int(int signo)
{
printf("caught SIGXFSZ\n");
return;
}
int
main(void)
{
int n,fd_in,fd_out;
char buf[BUFFSIZE];
if (signal_intr(SIGXFSZ,sig_int) < 0)
printf("error");
fd_in = open("test_source",O_RDWR);
fd_out = open("test_destination",O_RDWR|O_CREAT);
while ((n = read(fd_in, buf, BUFFSIZE)) > 0){
int c = write(fd_out,buf,n);
if (c != n)
printf("write %d \n", c);
else
printf("write %d \n", c);
}
if (n < 0)
printf("read errori\n");
exit(0);
}
我的运行环境ubuntu10.10,Linux 2.6.35,文件达到1024bytes后,调用SIGXFSZ信号处理程序,并且write返回-1
1 0 . 11 修改程序3 - 3,要求: ( a )将B U F F S I Z E改为1 0 0;( b )用s i g n a l _ i n t r函数捕捉S I G X F S Z 信号量并打印消息,然后从信号量处理程序中返回; ( c )如果没有写满请求的字节数,打印 w r i t e的返回值。将软资源限制R L I M I T _ F S I Z E(见7 . 11节)变为1 0 2 4字节(在s h e l l中设置软资源限制,如果不行就直接在程序中的调用s e t r l i m i t ),然后拷贝一个大于1 0 2 4字节的文件,在各种不同的系统上运行新程序,其结果如何?为什么?
答案(仅供参考)
#include
#define BUFFSIZE 100
static void
sig_int(int signo)
{
printf("caught SIGXFSZ\n");
return;
}
int
main(void)
{
int n,fd_in,fd_out;
char buf[BUFFSIZE];
if (signal_intr(SIGXFSZ,sig_int) < 0)
printf("error");
fd_in = open("test_source",O_RDWR);
fd_out = open("test_destination",O_RDWR|O_CREAT);
while ((n = read(fd_in, buf, BUFFSIZE)) > 0){
int c = write(fd_out,buf,n);
if (c != n)
printf("write %d \n", c);
else
printf("write %d \n", c);
}
if (n < 0)
printf("read errori\n");
exit(0);
}
我的运行环境ubuntu10.10,Linux 2.6.35,文件达到1024bytes后,调用SIGXFSZ信号处理程序,并且write返回-1
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7232789/viewspace-688542/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7232789/viewspace-688542/