亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1300 | 回復(fù): 0
打印 上一主題 下一主題

disklable.c [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2007-03-10 23:29 |只看該作者 |倒序瀏覽

                                                                #ifndef BBSIZE
#define    BBSIZE    8192            /* size of boot area, with label */
#endif
#ifndef NUMBOOT
#define NUMBOOT 0
#endif
char    *dkname, *specname;
char    tmpfil[] = _PATH_TMPFILE;
char    namebuf[BBSIZE], *np = namebuf;
struct    disklabel lab;
char    bootarea[BBSIZE];
#if NUMBOOT > 0
int    installboot;    /* non-zero if we should install a boot program */
char    *bootbuf;    /* pointer to buffer with remainder of boot prog */
int    bootsize;    /* size of remaining boot program */
char    *xxboot;    /* primary boot */
char    *bootxx;    /* secondary boot */
char    boot0[MAXPATHLEN];
#if NUMBOOT > 1
char    boot1[MAXPATHLEN];
#endif
#endif
enum {
    UNSPEC, EDIT, EDITOR, READ, RESTORE, SETWRITEABLE, WRITE, WRITEBOOT
} op = UNSPEC;
int    cflag;
int    dflag;
int    rflag;
int    tflag;
int    nwflag;
int    verbose;
int    donothing;
#ifdef DOSLABEL
struct dos_partition *dosdp;    /* DOS partition, if found */
struct dos_partition *readmbr(int);
#endif
void    makedisktab(FILE *, struct disklabel *);
void    makelabel(char *, char *, struct disklabel *);
int    writelabel(int, char *, struct disklabel *);
void    l_perror(char *);
int    edit(struct disklabel *, int);
int    editit(void);
char    *skip(char *);
char    *word(char *);
int    getasciilabel(FILE *, struct disklabel *);
int    cmplabel(struct disklabel *, struct disklabel *);
void    setbootflag(struct disklabel *);
void    usage(void);
u_int32_t getnum(char *, u_int32_t, u_int32_t, const char **);
               
                int
main(int argc, char *argv[])
{
    int ch, f, writeable, error = 0;
    char *fstabfile = NULL;
    struct disklabel *lp;
    char print_unit = 0;
    FILE *t;
    while ((ch = getopt(argc, argv, "BEf:NRWb:cdenp:rs:tvw")) != -1)
        switch (ch) {
#if NUMBOOT > 0
        case 'B': /* 安裝引導(dǎo)記錄的標(biāo)志 */
            ++installboot;
            break;
        case 'b': /* primary boot */
            xxboot = optarg;
            break;
#if NUMBOOT > 1
        case 's': /* 兩級啟動的第二級bootcode, secondary boot */
            bootxx = optarg;
            break;
#endif
#endif
        case 'N': /*Disallow writing of the pack label area on the selected disk.*/
            if (op != UNSPEC)
                usage();
            writeable = 0; /* 指定不可寫磁盤 */
            op = SETWRITEABLE;
            break;
        case 'R': /*從ASCI文件中恢復(fù)disklabel */
            if (op != UNSPEC)
                usage();
            op = RESTORE;
            break;
        case 'W': /* 允許寫的標(biāo)志 */
            if (op != UNSPEC)
                usage();
            writeable = 1;
            op = SETWRITEABLE;
            break;
        case 'c': /* 根據(jù)磁盤的label信息,重新初始化內(nèi)核中的label信息
            ++cflag;
            break;
        case 'd': /* use default label. */
            ++dflag;
            break;
        case 'e': /* 修改一個已經(jīng)存在的label */
            if (op != UNSPEC)
                usage();
            op = EDIT;
            break;
        case 'E': /* 使用內(nèi)建的編輯器編輯磁盤的label,add,del,modify */
            if (op != UNSPEC)
                usage();
            op = EDITOR;
            break;
        case 'f': /* 指定臨時文件(fstab格式)的名字 */
            fstabfile = optarg;
            break;
        case 'r': /* direct flag, 把label信息直接寫到磁盤或從磁盤讀出 */
            ++rflag;
            break;
        case 't': /*Format the label as a disktab(5) entry. */
            ++tflag;
            break;
        case 'w': /* 寫label */
            if (op != UNSPEC)
                usage();
            op = WRITE;
            break;
        case 'p': /* 單位*/
            if (strchr("bckmg", optarg[0]) == NULL ||
                optarg[1] != '\0')
                usage();
            print_unit = optarg[0];
            break;
        case 'n':
            donothing++;
            break;
        case 'v':
            verbose++;
            break;
        case '?':
        default:
            usage();
    }
    argc -= optind;
    argv += optind;
#if NUMBOOT > 0
    if (installboot) {
        rflag++;
        if (op == UNSPEC)
            op = WRITEBOOT;
    } else {
        if (op == UNSPEC)
            op = READ;
    }
#else
    if (op == UNSPEC)
        op = READ;
#endif
    if (argc  1 || (rflag && cflag + dflag > 0) ||
        (fstabfile && op != EDITOR))
        usage();
    dkname = argv[0]; /*磁盤的名稱*/
    f = opendev(dkname, (op == READ ? O_RDONLY : O_RDWR), OPENDEV_PART,
        &specname);
    if (f  0)
        err(4, "%s", specname);
               
                #ifdef DOSLABEL
    /*
     * Check for presence of DOS partition table in
     * master boot record. Return pointer to OpenBSD
     * partition, if present. If no valid partition table,
     * return 0. If valid partition table present, but no
     * partition to use, return a pointer to a non-386bsd
     * partition.
     */
    dosdp = readmbr(f);
#endif
    switch (op) {
    case EDIT:
        if (argc != 1) /* 編輯已經(jīng)存在的Label,用-e指定,后面只能跟一個磁盤參數(shù)*/
            usage();
        if ((lp = readlabel(f)) == NULL)
            exit(1); /* readlabel 獲取disklabel結(jié)構(gòu) */
        error = edit(lp, f);
        break;
    case EDITOR:
        if (argc != 1)
            usage();
        if ((lp = readlabel(f)) == NULL)
            exit(1);
        error = editor(lp, f, specname, fstabfile);
         /*  editor()函數(shù)用于建立磁盤的label */
        break;
    case READ:
        if (argc != 1)
            usage();
        if ((lp = readlabel(f)) == NULL)
            exit(1);
        if (tflag)
            makedisktab(stdout, lp);
        else
            display(stdout, lp, NULL, print_unit, 0, 0);
        error = checklabel(lp);
        break;
    case RESTORE:
        if (argc  2 || argc > 3)
            usage();
#if NUMBOOT > 0
        if (installboot && argc == 3)
            makelabel(argv[2], NULL, &lab);
#endif
        lp = makebootarea(bootarea, &lab, f);
        if (!(t = fopen(argv[1], "r")))
            err(4, "%s", argv[1]);
        if (getasciilabel(t, lp))
            error = writelabel(f, bootarea, lp);
        else
            error = 1;
        fclose(t);
        break;
    case SETWRITEABLE:
        if (!donothing) {
            if (ioctl(f, DIOCWLABEL, (char *)&writeable)  0)
                err(4, "ioctl DIOCWLABEL");
        }
        break;
    case WRITE:
        if (argc  2 || argc > 3)
            usage();
        makelabel(argv[1], argc == 3 ? argv[2] : NULL, &lab);
        lp = makebootarea(bootarea, &lab, f);
        *lp = lab;
        if (checklabel(lp) == 0)
            error = writelabel(f, bootarea, lp);
        break;
#if NUMBOOT > 0
    case WRITEBOOT:
    {
        struct disklabel tlab;
        if ((lp = readlabel(f)) == NULL)
            exit(1);
        tlab = *lp;
        if (argc == 2)
            makelabel(argv[1], NULL, &lab);
        lp = makebootarea(bootarea, &lab, f);
        *lp = tlab;
        if (checklabel(lp) == 0)
            error = writelabel(f, bootarea, lp);
        break;
    }
#endif
    default:
        break;
    }
    exit(error);
}
               
               
               
               

本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u/31277/showart_256703.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP