文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>linux文件操作C编程小例

linux文件操作C编程小例

时间:2010-09-02  来源:楚夕

模拟买票系统,调用linux文件锁进行操作


在linux下打开两个终端,分别运行该程序,进入买票状态时将数据文件锁定,可用来防止数据共享错误

 


#include<stdio.h>        /*文件预处理,包含标准输入输出库*/
#include<stdlib.h>                 /*文件预处理,包含system函数库*/
#include <unistd.h>
#include <sys/file.h>
#include <sys/types.h>
#include <sys/stat.h>

 

void lock_set(int fd, int type)
{
  struct flock lock;
  lock.l_whence = SEEK_SET;
  lock.l_start = 0;
  lock.l_len =0;

  FILE * fp;

  int num,total;

  while (1){
    lock.l_type=type;
    if ((fcntl(fd,F_SETLK,&lock))==0) {
       if(lock.l_type==F_WRLCK){
         printf("请输入您需要的票张数:");
         scanf("%d",&num);
         fp=fopen("/home/king/tickets","r+");
         fscanf(fp,"%d",&total);
         fclose(fp);
         fp=fopen("/home/king/tickets","w+");
         total=total-num;
         fprintf(fp,"%d",total);
         fclose(fp);
         fcntl(fd,F_SETLK,&lock);
        }

    else if(lock.l_type==F_UNLCK)
        printf("您已经退出\n");

    return;
    }

    fcntl(fd,F_GETLK,&lock);
    if(lock.l_type != F_UNLCK){
      printf("抱歉,该文件正被操作中,请稍候......\n");
      getchar();
      break;
    }
  }
}


int main()
{
   int fd;
   int k;
   fd=open("/home/king/tickets", O_RDWR | O_CREAT, 0666);
   if (fd<0){
     perror("打开出错");
     exit(1);
   }

   while (1){
     printf("请输入您要的操作:\n");
     printf("1).查看车票\n");
     printf("2).购买车票\n");
     printf("3).退出买票\n");
     printf("4).退出系统\n");
     scanf("%d",&k);
     switch (k)    
     {
       case 1:
        system("cat /home/king/tickets");
        printf("\n");
        getchar();
        break;
       case 2:
        lock_set(fd,F_WRLCK);
        getchar();
        break;
       case 3:
        lock_set(fd,F_UNLCK);
        getchar();
        break;
       case 4:
        close(fd);
        exit(0);
      }
   }
}

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载