ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 《APUE》习题 10.11

《APUE》习题 10.11

原创 Linux操作系统 作者:bartfj 时间:2011-03-07 09:58:13 0 删除 编辑
题目:

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/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 《APUE》习题 10.6
下一篇: 《APUE》习题 10.12
请登录后发表评论 登录
全部评论

注册时间:2008-02-17

  • 博文量
    86
  • 访问量
    241308