亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? eject.c

?? 在linux下多媒體開發實例linux下多媒體開發
?? C
字號:
/* *		L I N U X   E J E C T   C O M M A N D * * Copyright (C) 1994-96 Jeff Tranter (Jeff_Tranter@Mitel.COM) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * ******************************************************************** * * See the man page for a description of what this program does and what * the requirements to run it are. *  * It was developed using: * - Linux kernel 1.1.72 * - gcc 2.5.8 * - Panasonic CR-562-B CD-ROM drive *  * Jeff Tranter (Jeff_Tranter@Mitel.COM) */#include <stdlib.h>#include <sys/types.h>#include <sys/ioctl.h>#include <fcntl.h>#include <errno.h>#include <unistd.h>#include <stdio.h>#include <string.h>#include <sys/mount.h>#include <linux/cdrom.h>/* set the default device here */char default_device[255];/* default options */int f_option = 0;  /* force eject even if mounted */int d_option = 0;  /* display default device */int n_option = 0;  /* display nicknames */int a_option = 0;  /* auto-eject */int a_arg = 0;     /* argument to -a option */int v_option = 0;  /* verbose mode */int u_option = 0;  /* unmount first */char device[256];  /* device name */typedef struct {  char *name;  char *device;} nickname_t;/* table of device nicknames */nickname_t nickname[] = {   { "cdrom",  "/dev/cdrom" },  { "sbpcd" , "/dev/sbpcd" },  { "sbpcd0", "/dev/sbpcd0" },  { "sbpcd1", "/dev/sbpcd1" },  { "sbpcd2", "/dev/sbpcd2" },  { "sbpcd3", "/dev/sbpcd3" },  { "cdu31a", "/dev/cdu31a" },  { "cdu535", "/dev/cdu535" },  { "mcd",    "/dev/mcd" },  { "lmscd",  "/dev/lmscd" },  { "scd0",   "/dev/scd0" },  { "scd1",   "/dev/scd1" },  { "cd0",    "/dev/cd0" },  { "cd1",    "/dev/cd1" },  { "sr0",    "/dev/sr0" },  { "sr1",    "/dev/sr1" },  { "sra",    "/dev/sra" },  { "srb",    "/dev/srb" },  /* next entry indicates end of table */  { 0, 0 }};/* display command usage on standard error and exit */void usage(){  fprintf(stderr,	  "eject [-f][-u][-v]                 -- eject default device\n"	  "eject [-f][-u][-v] <nickname>      -- eject device by nickname\n"	  "eject [-f][-u][-v] <device-name>   -- eject device by device name\n"	  "eject -d                           -- display default device\n"	  "eject -n                           -- display device nicknames\n"	  "eject -a [on|off|1|0] [-v]         -- turn auto-eject feature on or off\n"	  "\n"	  "Options:\n"	  "    -f  force eject even if device is mounted.\n"	  "    -u  unmount before forcing an eject.\n"	  "    -v  enables verbose output.\n"	  );  exit(1);}/* handle command line options */void parse_args(int argc, char **argv){  const char     *flags = "fdna:uv";  int             c;  while ((c = getopt(argc, argv, flags)) != EOF) {    switch (c) {    case 'f':      f_option = 1;      break;    case 'd':      d_option = 1;      break;    case 'n':      n_option = 1;      break;    case 'a':      a_option = 1;      /* make some poor guesses at what means on and off */      if (!strcmp(optarg, "0"))	a_arg = 0;      else if (!strcmp(optarg, "off"))	a_arg = 0;      else if (!strcmp(optarg, "aus"))	a_arg = 0;      else if (!strcmp(optarg, "ferme"))	a_arg = 0;      else if (!strcmp(optarg, "1"))	a_arg = 1;      else if (!strcmp(optarg, "on"))	a_arg = 1;      else if (!strcmp(optarg, "auf"))	a_arg = 1;      else if (!strcmp(optarg, "allumee"))	a_arg = 1;      else	usage();      break;    case 'u':      u_option = 1;      break;    case 'v':      v_option = 1;      break;    case '?':      usage();      break;    }  }  /* check for a single additional argument */  if ((argc - optind) > 1)    usage(); /* too many arguments */    if ((argc - optind) == 1)    strcpy(device, argv[optind]); /* one argument */}int main(int argc, char **argv){  int fd;           /* file descriptor for CD-ROM device */  int status;       /* return status for system calls */  int i;            /* loop counter */  char s[255];      /* for error messages */  char s1[256] = { 0 }; /* for reading /etc/mtab */  char s2[256];     /* "   "       "         */  char dummy[256];  /* "   "       "         */  char umount_cmd[256] = "/bin/umount "; /* umount command string */  char *s3;         /* general purpose */  FILE *fp;         /* for reading /etc/mtab */  /* get default device from $CDROM environment variable; if not set then use compiled in default */  s3 = getenv("CDROM");  if (s3 != NULL)    strcpy(default_device, s3);  else    strcpy(default_device, "/dev/cdrom");    /* make default device the default */  strcpy(device, default_device);    /* parse the command line arguments */  parse_args(argc, argv);    /* handle -d option */  if (d_option) {    printf("eject: default device is `%s'\n", default_device);    exit(0);  }  /* handle -n option */    if (n_option) {    printf("eject: device nicknames:\n");    printf("Nickname  Device\n");    printf("--------  ----------\n");    for (i = 0 ; nickname[i].name != 0 ; i++)      printf("%-8s  %-8s\n", nickname[i].name, nickname[i].device);    exit(0);  }  if (v_option)    printf("eject: device name is `%s'\n", device);  /* check if device is a nickname */  for (i = 0 ; nickname[i].name != 0 ; i++)    if (!strcmp(device, nickname[i].name)) {      if (v_option)	printf("eject: `%s' is a nickname for `%s'\n", device, nickname[i].device);      strcpy(device, nickname[i].device);      break;    }  /* check if device is a symbolic link. If so, find out what it points to */  status = readlink(device, s1, sizeof(s1));  if (status != -1) {    if (s1[0] == '/') {      /* absolute link */      strcpy(s2, s1);    } else {      /* a relative link */      strcpy(s2, device);      s3 = strrchr(s2, '/');      if (s3 != 0) {	s3[1] = 0;	strcat(s2, s1);      }    }    if (v_option)      printf("eject: `%s' is a link to `%s'\n", device, s2);    strcpy(device, s2);  }  /* open device */    fd = open(device, O_RDONLY);  if (fd < 0) {    sprintf(s, "eject: open failed for `%s'", device);    perror(s);    exit(1);  }  /* handle auto-eject option */  if (a_option) {#ifdef CDROMEJECT_SW    if (v_option)      if (a_arg)	printf("eject: enabling auto-eject mode\n");      else	printf("eject: disabling auto-eject mode\n");    status = ioctl(fd, CDROMEJECT_SW, a_arg);    if (status != 0) {      sprintf(s, "eject: CDROMEJECT_SW ioctl failed for `%s'", device);      perror(s);      exit(1);    }#else    printf("eject: auto-eject not supported by kernel\n");#endif    exit(0);  }    /* see if device has been mounted by looking in /etc/mtab */  fp = fopen("/etc/mtab", "r");  while (!feof(fp)) {    fscanf(fp, "%s %s %s %s %s %s", s1, s2, dummy, dummy, dummy, dummy);    if (!strcmp(s1, device)) {      if (!f_option) {	printf("eject: `%s' is mounted at `%s', not ejected\n", s1, s2);	exit(1);      } else {	if (v_option)	  printf("eject: `%s' is mounted at `%s'\n", s1, s2);	if (u_option) {	  if (v_option)	    printf("eject: trying to unmount `%s'\n", s1);	  strcat(umount_cmd, s1);      /* setup umount command */	  status = system(umount_cmd); /* do it */	  if ((status == -1) || (status == 127)) {	    sprintf(s, "eject: unmount of `%s' failed", s1);	    perror(s);	  }	}      }      break;    }  }  fclose(fp);    /* eject */    status = ioctl(fd, CDROMEJECT);  if (status != 0) {    sprintf(s, "eject: CDROMEJECT ioctl failed for `%s'", device);    perror(s);    exit(1);  }    /* close device */  status = close(fd);  if (status != 0) {    sprintf(s, "eject: close failed for `%s'", device);    perror(s);    exit(1);  }    exit(0);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩和欧美一区二区| av中文字幕一区| 国产精品小仙女| 欧美日韩精品三区| 国产精品女上位| 青青草成人在线观看| 99久久99久久免费精品蜜臀| 日韩欧美三级在线| 亚洲午夜一区二区三区| 国产99久久久久| 日韩欧美国产综合在线一区二区三区| 亚洲欧洲综合另类| 大尺度一区二区| 日韩美女视频在线| 亚洲成av人片在线| 日本高清不卡一区| 中文字幕精品一区二区精品绿巨人 | 日韩高清欧美激情| 一本色道久久综合亚洲91| 久久久久国产免费免费 | 国产精品福利一区| 国产一区二区中文字幕| 555夜色666亚洲国产免| 亚洲综合丁香婷婷六月香| 韩国一区二区三区| 国产日产欧美一区| 9191国产精品| 自拍偷拍国产精品| 高清成人在线观看| 欧美高清一级片在线观看| 国产成人鲁色资源国产91色综| 日韩免费看网站| 久久99最新地址| 精品日韩成人av| 国产乱人伦偷精品视频免下载 | 91视频你懂的| 一区二区三区在线免费| 色婷婷综合久久久久中文 | 欧美性三三影院| 午夜私人影院久久久久| 欧美精品三级日韩久久| 丝袜诱惑制服诱惑色一区在线观看 | 日韩黄色在线观看| 欧美中文字幕一二三区视频| 精品国产免费久久| 久久精品国产精品亚洲综合| 日韩欧美中文字幕一区| 久久国产精品99久久久久久老狼| 精品对白一区国产伦| 国产一区在线精品| 中文字幕在线不卡| 在线看一区二区| 欧美aⅴ一区二区三区视频| 精品免费日韩av| 成人午夜激情视频| 亚洲图片一区二区| 日韩一级二级三级| 懂色av中文一区二区三区| 亚洲免费观看高清完整版在线观看 | 国产又黄又大久久| 欧美日韩精品一区二区三区蜜桃 | 蜜桃视频免费观看一区| 亚洲精品在线观看网站| 不卡视频在线看| 亚洲第一av色| 国产色产综合产在线视频| 色综合天天做天天爱| 麻豆精品视频在线观看免费| 国产精品色噜噜| 欧美精品色综合| 99久久免费视频.com| 亚洲va中文字幕| 久久精品这里都是精品| 国产一区二区三区四| 国产欧美日韩三区| 色偷偷成人一区二区三区91 | k8久久久一区二区三区| 综合久久久久久| 精品噜噜噜噜久久久久久久久试看 | 美国十次综合导航| 99精品视频一区| 亚洲一二三区视频在线观看| 欧美一级艳片视频免费观看| 国产成人亚洲综合a∨猫咪 | 91精品欧美福利在线观看| 国内成人精品2018免费看| 久久久久国产精品厨房| 欧美一卡二卡在线观看| 成人免费av网站| 亚洲成年人影院| 国产日韩欧美一区二区三区综合| 色美美综合视频| 久久99国产精品麻豆| 亚洲日本护士毛茸茸| 欧美天堂一区二区三区| 91婷婷韩国欧美一区二区| 看国产成人h片视频| 亚洲黄色性网站| 精品国产乱码久久久久久牛牛| 99久久久免费精品国产一区二区| 日韩va欧美va亚洲va久久| 日韩一区中文字幕| 欧美日韩国产美女| 欧美丝袜第三区| 99re这里只有精品视频首页| 韩国精品免费视频| 午夜激情一区二区| 亚洲色图清纯唯美| 久久综合色之久久综合| 色综合天天综合给合国产| www.av精品| 福利一区福利二区| 久久精品久久精品| 老司机午夜精品99久久| 亚洲成av人片在线观看| 成人免费在线视频观看| 国产亚洲欧美一区在线观看| 精品嫩草影院久久| 宅男噜噜噜66一区二区66| 色狠狠一区二区三区香蕉| 成人自拍视频在线观看| 国产乱码精品一区二区三| 久久国产视频网| 免费成人小视频| 亚洲午夜国产一区99re久久| 日韩经典一区二区| 亚洲成人av中文| 亚洲一卡二卡三卡四卡无卡久久| 国产精品久久看| 国产欧美一区视频| 国产三级一区二区| 欧美成人综合网站| 26uuu国产电影一区二区| 日韩一区二区三免费高清| 91麻豆精品国产91久久久久久久久| 在线观看亚洲精品| 欧美日本高清视频在线观看| 欧美日韩精品高清| 精品国产免费视频| 国产欧美日韩精品一区| 国产拍欧美日韩视频二区| 国产午夜精品一区二区三区四区| 久久久精品免费免费| 国产性做久久久久久| 国产精品高潮久久久久无| 亚洲人成影院在线观看| 亚洲靠逼com| 五月天激情小说综合| 有坂深雪av一区二区精品| 欧美bbbbb| 国产一区二区电影| 成人激情小说网站| 色噜噜久久综合| 欧美日韩国产电影| 精品sm在线观看| 国产日本亚洲高清| 亚洲视频一区二区在线观看| 亚洲一区二区三区自拍| 亚洲福利一二三区| 久久精品国产精品亚洲红杏| 国产美女久久久久| 91在线观看视频| 日韩精品一区二区三区swag | 国产女同性恋一区二区| 中文字幕一区在线观看视频| 中文字幕一区二区三区乱码在线 | 欧美图区在线视频| 日韩欧美成人激情| 国产精品久久久久久久久快鸭 | 国产精品美女久久久久久久久久久 | 8x福利精品第一导航| 欧美刺激午夜性久久久久久久 | 日韩高清国产一区在线| 国产美女一区二区三区| 成人av资源网站| 色爱区综合激月婷婷| 欧美精品一区二区久久久| 中文字幕一区av| 亚洲福中文字幕伊人影院| 色综合夜色一区| 久久久久久亚洲综合影院红桃| 亚洲视频资源在线| 国产又粗又猛又爽又黄91精品| av网站免费线看精品| 精品少妇一区二区| 亚洲色图.com| 久久精品国产精品亚洲精品| 欧美伊人精品成人久久综合97| 欧美一级精品在线| 亚洲精选一二三| 国产成人午夜视频| 91精品国产手机| 一区二区国产盗摄色噜噜| 99国产精品视频免费观看| 欧美大片在线观看一区| 亚洲午夜电影网| 日本韩国精品在线| 国产精品视频一区二区三区不卡| 亚洲午夜影视影院在线观看| 欧美日韩亚洲另类|