• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 怎么每次讀和寫一個字節從一個文件?

    發表于:2007-05-25來源:作者:點擊數: 標簽:字節不知道每次怎么文件
    不知道這個程序錯在哪里? 請高手指點! 代碼: #include #include #include #include intmain(void){ size_t n,tmp; char *c; int fd; if((fd=open(/etc/fstab,O_RDONLY))0) { /* open /etc/fstab file */ printf(open fstab error\n); return(1); } for(n=1
     不知道這個程序錯在哪里?
    請高手指點!
    代碼:
    #include 
    #include 
    #include 
    #include 
    int
    main(void)
    {
         size_t n,tmp;
         char   *c;
         int    fd;
         if((fd=open("/etc/fstab",O_RDONLY))<0) { /* open /etc/fstab file */
                printf("open fstab error\n");
                return(1);
         }
         for(n=1;n<10;n++) {
                if((tmp=read(fd,&c,1)) != 1) { /* read 1 byte */
                         printf("read %d error\n",n);
                         return(1);
                } else {
                         if(write(STDOUT_FILENO,&c,tmp)<0) { /* write the byte to   
                                                          stdout */ 
                                printf("write %d error",n) ;
                                return(1);
                         }
               }
               *c +=1; /* memory point add 1 byte */
          }
          return(0);
    }

     

    發帖時間: 04-03-26, 20:34


    代碼:
    #include 
    #include 
    #include 
    #include 
    
    int
    main(void)
    {
      size_t n; /* tmp不需要 */
      char c; /* 注意這里 */
      int fd;
      
      if((fd = open("/etc/fstab", O_RDONLY)) < 0) { /* open /etc/fstab file */
        printf("open fstab error\n");
        return(1);
      }
      for(n=1; n<10; n++){ /* C語言中很少用n=1的,一般用n=0 */
        if(read(fd, &c, 1) != 1) { /* read 1 byte */
          printf("read %d error\n", n);
          return(1);
        }else{
          if(write(STDOUT_FILENO, &c, 1) != 1) { /* write the byte to
                                                   stdout */
            printf("write %d error", n) ;
            return(1);
          }
        }
      }
      return(0);
    }
    libinary離線中
    回復時引用此帖 快速回復此帖
    devel的頭像
    資 料:
    已封禁
    注冊日期: Sep 2003
    來自: 自由的世界 !
    帖子: 1,461
    精華: 7
      向版主反映此帖   第 6 帖  
    發帖時間: 04-03-26, 20:36


    read()和write()的用法我是看這個例程的,但我看了很久都看不懂@@@@
    代碼:
    #include "unp.h"
    ssize_t
    readline(int fd,void *vptr,size_t maxlen)
    {
           ssize_t     n,rc;
           char        c,*ptr;
           ptr=vptr;
           for(n=1;nwas="" data="" eof,some="" break;="" else="" eof,no="" return(0);="" if(n="=1)" if(rc="=0)" sotred,like="" is="" newline="" ?\n?)="" if(c="=" ++="c" 1)="" ="=" if((rc="read(fd,&c,1))" again:="" />

    從一個描述字讀文本文件,一次一個字節@-@,難道教程錯了,我也感到上一貼read() and writea()的用法不對頭/

    用read的時候,很多時候都不需要一個指向文件的指針的,直接就可以用了,read里有個文件指針,這是steven自己寫的一個讀一行的函數,if read那,不知道你有沒有貼錯,應該是不等于?


    樓上的說法不夠準確。read使用的是文件描述符,fread使用的才是文件指針。
    在if((rc=read(fd,&c,1)) == 1) 中read(fd,&c, 1)的返回值是實際讀取的字節數,而fread()返回的是實際讀取的數據項數。你可以仔細看看它們的man文檔。
     
    //nod
    open/read/write/gets/getc等是linux直接提供的系統調用
    fopen/fread/fwrite/fgets/fgetc/feof等是標準庫函數,用文件流輸入輸出,是在系統調用的基礎上增加了buffer實現的。
    兩套函數的標識符(或者說是文件句柄)是不能混用的。只能通過fdopen或者fileno來顯式轉換
     幫忙阿?。?!沒見過這種用法:
    if((rc=read(fd,&c,1)) == 1) {

    特別是&c,按照我的程序怎么寫出你,請大家改改。。。。。。。
     &c有什么問題嗎?取變量c的地址
    char c;
    &c就是char *
    象你前面寫的
    char *c;
    那么&c就成了char **了
     
    發帖時間: 04-03-27, 22:45


    清問改成這樣怎么會不行??
    char c;
    &c +=1; /* memory point add 1 byte */


    這是測試的程序:
    代碼:
    int
    main(void)
    {
      char a;
      printf("%p  %p\n",&a,&a+1);
      printf("%p\n",&a+sizeof(char));
      return(0);
    }
    # ./a.out
    0xbfffed67  0xbfffed68
    0xbfffed68
     你應該找一本C語言的書,把指針這一章好好讀一下
    char c;定義了一個變量
    &c取變量c的地址,但是取到的地址可不是變量,比如你的例子
    &c是0xbfffed67,那么
    &c += 1;就成了0xbfffed67 += 1;當然不對了
    或者說&c不是一個左值(lvalue)
     這個為什么有錯誤,請問錯在哪里?

    代碼:
    #include 
    #include 
    #include 
    #include 
    int
    main(void)
    {
     
         char   buf[10];
         int    fd;
         unsigned loop;
         if((fd=open("/etc/fstab",O_RDONLY))<0) { /* open /etc/fstab file */
                printf("open fstab error\n");
                return(1);
         }
         if(read(fd,buf,10) != 10) {
                printf("read error\n");
                return(1);
         }
         for(loop=0;loop<10;loop++) {
                if(fputs(buf[loop],stdout)<0) {
                        printf("fputs error\n");
                        return(1);
                }
         }
         return(0);
    }
    # gcc -c get_1_byte_v3.c
    get_1_byte_v3.c: In function `main':
    get_1_byte_v3.c:21: warning: passing arg 1 of `fputs' makes pointer from integer without a cast
     我不太明白你這段要實現什么功能:
    代碼:
    for(loop=0;loop<10;loop++) {
      if(fputs(buf[loop],stdout)<0) {
        printf("fputs error\n");
        return(1);
      }
    }

    如果是輸出單個字符的話應該用
    if(fputc(buf[loop], stdout) == EOF)
     謝謝??!這是一次寫一個字符,,看來函數不能亂用。。
     這個程序在UNIX下就可以編譯并正常運行,在LINUX就不可以編譯通過,在LINUX怎么些呢?
    代碼:
    #include 
    #include 
    #include 
    int
    main(void)
    {
         int        fd,n;
         char       buf[10];
         if((fd=open("/etc/fstab",O_RDONLY))<0) {
                   printf("open file error\n");
                   return(1);
         }
         for(n=0;n<10;n++) {
                   if(read(fd,&buf[n],1) != 1 ) {
                            printf("read error\n");
                            return(1);
                   }
                   if(write(STDOUT_FILENO,&buf[n],1) == NULL ) {
                            printf("write error\n");
                            return(1);
                   }
         }
         return(0);
    }
    # gcc -c get_1_byte.d.c
    get_1_byte.d.c: In function `main':
    get_1_byte.d.c:18: warning: comparison between pointer and integer
    
     
    暈???!write()返回的是字節數,并且出錯是返回的是-1。if(write(STDOUT_FILENO,&buf[n],1) == NULL )應該改成if(write(STDOUT_FILENO,&buf[n],1) < 0 )

    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>