2008年6月22日 星期日

[C] fopen with 'a' & fseek

            fopen with 'a' 無法使用 fseek 對檔案指標進行倒退嚕
            這兩天運氣不怎好  總是卡在奇怪的 bug 中
            真的是太嫩了  還差得遠

                =========================================================
                = By finwater (cheer up) @ Mon Jun 23 20:15:07 2008
                =
                fopen with flag 'a' 的 'a' 是 append 的意思
                所以 write 的 data 會被自動 append 到檔案的最後
                無論此時 offset 在哪
                但還是可以使用 fseek 對 file pointer 的 offset 進行操作
                =========================================================

    @ code 1 : fopen with 'ab+'

        #include <stdio.h>
        #include <stdlib.h>

        int main(int argc, char *argv[])
        {
                FILE * fd = fopen ("dd" , "ab+");
                fd = fopen ("dd" , "w+");
                fclose ( fd );

                fd = fopen ("dd" , "ab+");
                fprintf( fd , "0123456789" );

                fseek( fd , -5 , SEEK_CUR );

                fprintf( fd , "0123456789" );

                fclose ( fd );
                return 0;
        }

        結果: 01234567890123456789

    @ code 2 : fopen wtih 'rb+'
        #include <stdio.h>
        #include <stdlib.h>

        int main(int argc, char *argv[])
        {
                FILE * fd = fopen ("dd" , "ab+");
                fd = fopen ("dd" , "w+");
                fclose ( fd );

                fd = fopen ("dd" , "rb+");
                fprintf( fd , "0123456789" );

                fseek( fd , -5 , SEEK_CUR );

                fprintf( fd , "0123456789" );

                fclose ( fd );
                return 0;
        }

        結果: 012340123456789


沒有留言:

張貼留言