《APUE》习题 10.11

题目:

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 "apue.h"
#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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值