思考题1.0

课后思考题:
① 如果多个用户对一个文件进行操作的时候,如何解决,考虑用文件锁的形式和多路复用形式
当多个用户对文件操作时,用户是不允许同时对进行修改。因此这里就需要用到文件锁来保证文件的安全性。
a.协同锁
协同锁要求参与操作的进程之间协同合作。只有当参与操作的进程是协同合作的时候,协同锁才能发挥作用。协同锁有时也被称为“非强制”锁。
b.强制锁
强制锁不需要参与操作的进程之间保持协同合作。它利用内核来查检每个打开、读取、写入操作,从而保证在调用这些操作时不违反文件上的锁规则。
为了使能Linux中的强制锁功能,你需要在文件系统级别上打开它,同时在单个文件上打开它。
//#include < s tdio.h>
//#include < stdlib.h>

//#include < sys/types.h>
//#include < sys/stat.h>
//#include < fcntl.h>
//#include < wait.h>
//#include < unistd.h>

int main()
{
int fd;
pid_t pid;

fd = open("flock.txt",O_RDWR|O_CREAT|O_TRUNC, 0644);

if(fd < 0)
{
    perror("open error!");
    exit(1);
}

if(flock(fd,LOCK_EX) < 0)
{
    perror("flock()");
    exit(1);
}
printf("A:%d: locked!\n",getpid());

pid = fork();
if(pid < 0)
{
    perror("fork()");
    exit(1);
}

if(pid == 0)
{
/**/fd = open("flock.txt",O_RDWR|O_CREAT|O_TRUNC, 0644);

    if(pid < 0)
    {
        perror("open()");
        exit(1);
    }/**/

    if(flock(fd, LOCK_EX) < 0)
    {
        perror("flock()");
        exit(1);
    }
    printf("B:%d: locked:\n",getpid());
    exit(0);
}
wait(NULL);
return 0;

}

② 在Linux中写一个程序,里面全局变量,局部变量,static,const,常数,数组,输出这些变量的地址(包括赋值的和没有赋值的,各类数据类型)
//#include < stdio.h>

int a;
int b = 1;
int const c = 2;
static int d;
static int e = 3;
char src1[10];
char dest1[] = {‘4’,’5’};

int main()
{

int f;
int g = 1;
int const h = 2;
static int i;
static int j = 3;
char src2[10];
char dest2[] = {'4','5'};

printf("未初始化的全局变量     %p\n",&a);
printf("初始化的全局变量       %p\n",&b);
printf("常全局变量             %p\n",&c);
printf("未初始化的静态全局变量 %p\n",&d);
printf("初始化的静态全局变量   %p\n",&e);
printf("未初始化的全局数组     %p\n",src1);
printf("初始化的全局数组       %p\n",dest1);
printf("未初始化的局部变量     %p\n",&f);
printf("初始化的局部变量       %p\n",&g);
printf("常局部变量             %p\n",&h);
printf("未初始化的静态局部变量 %p\n",&i);
printf("初始化的静态局部变量   %p\n",&j);
printf("未初始化的局部数组     %p\n",src2);

printf(“初始化的局部数组 %p\n”,dest2);

}
结果:
未初始化的全局变量 0x80498d0
初始化的全局变量 0x80498a4
常全局变量 0x80485a0
未初始化的静态全局变量 0x80498c0
初始化的静态全局变量 0x80498a8
未初始化的全局数组 0x80498c4
初始化的全局数组 0x80498ac
未初始化的局部变量 0xbff1d730
初始化的局部变量 0xbff1d72c
常局部变量 0xbff1d728
未初始化的静态局部变量 0x80498bc
初始化的静态局部变量 0x80498b0
未初始化的局部数组 0xbff1d71e
初始化的局部数组 0xbff1d71c
//

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值