S_I386.C
上传用户:yeshiping1
上传日期:2007-01-06
资源大小:29k
文件大小:3k
源码类别:

磁盘编程

开发平台:

Others

  1. /* This file contains system-specific functions suitable for
  2.  * most AT&T System V/386 variants (ISC,SCO,Intel...).
  3.  * The program pfdisk.c calls these routines.
  4.  */
  5. #include <stdio.h>
  6. #include <fcntl.h>
  7. #include <sys/types.h>
  8. #include <sys/vtoc.h>
  9. #define extern
  10. #include "sysdep.h"
  11. #undef extern
  12. int usage(prog) /* print a usage message */
  13. char *prog; /* program name */
  14. {
  15.   fprintf(stderr,"Usage: %s devn
  16. where 'dev' is the device name, i.e. /dev/rdsk/0p0n
  17. (The device must start on absolute sector zero.)n",prog);
  18. }
  19. void getGeometry(dev, c, h, s)
  20. char *dev; /* device name */
  21. unsigned *c,*h,*s; /* cyls, heads, sectors */
  22. {
  23.   int devfd, retval;
  24.   struct disk_parms dp;
  25.   
  26.   devfd = open(dev, O_RDONLY, 0);
  27.   if (devfd < 0) {
  28.     fprintf(stderr,"%s: can't open for readingn", dev);
  29.     return;
  30.   }
  31.   retval = ioctl(devfd, V_GETPARMS, &dp);
  32.   close(devfd);
  33.   if (retval < 0) {
  34.     fprintf(stderr,"%s: can't get disk parametersn", dev);
  35.     return;
  36.   }
  37.   if (dp.dp_type != DPT_WINI) {
  38.     fprintf(stderr,"%s: not a Winchester Diskn", dev);
  39.     return;
  40.   }
  41.   *c = dp.dp_cyls;
  42.   *h = dp.dp_heads;
  43.   *s = dp.dp_sectors;
  44. }
  45. int getFile(name, buf, len) /* read file into buffer */
  46. char *name, *buf;
  47. int len;
  48. { /* (open, read, close) */
  49.   int devfd, retval;
  50.   
  51.   devfd = open(name, O_RDONLY, 0);
  52.   if (devfd < 0) {
  53.     fprintf(stderr,"%s: can't open for readingn", name);
  54.     return(devfd);
  55.   }
  56.   retval = read(devfd, buf, len);
  57.   if (retval < 0)
  58.     fprintf(stderr,"%s: read failedn", name);
  59.   close(devfd);
  60.   return(retval);
  61. }
  62. int putFile(name, buf, len) /* write buffer to file */
  63. char *name, *buf;
  64. int len;
  65. { /* (open, write, close) */
  66.   int devfd, retval;
  67.   
  68.   devfd = open(name, O_WRONLY|O_CREAT, 0666);
  69.   if (devfd < 0) {
  70.     fprintf(stderr,"%s: can't open for writingn", name);
  71.     return(devfd);
  72.   }
  73.   retval = write(devfd, buf, len);
  74.   if (retval < 0)
  75.     fprintf(stderr,"%s: write failedn", name);
  76.   close(devfd);
  77.   return(retval);
  78. }
  79. int getBBlk(devname, buffer) /* read block into buffer */
  80. char *devname, *buffer; /* (open, read, close) */
  81. {
  82.   int devfd, retval;
  83.   
  84.   devfd = open(devname,O_RDONLY);
  85.   if (devfd < 0) {
  86.     printf("%s: can't open for readn", devname);
  87.     return(devfd);
  88.   }
  89.   retval = read(devfd, buffer, SECSIZE);
  90.   close(devfd);
  91.   return(retval);
  92. }
  93. int putBBlk(devname, buffer) /* write buffer to device */
  94. char *devname, *buffer; /* (open, write, close) */
  95. {
  96.   int devfd, retval;
  97.   
  98.   devfd = open(devname,O_WRONLY);
  99.   if (devfd < 0) {
  100.     printf("%s: can't open for writen",devname);
  101.     return(devfd);
  102.   }
  103.   retval = write(devfd, buffer, SECSIZE);
  104.   sync();
  105.   close(devfd);
  106.   return(retval);
  107. }