Do typical system call interfaces allow reducing the size of a file (without replacing it with a different...












1















Is there a way to open() a file and cause it to shrink? One can, of course, open them in append-mode or seek to the end and write to cause them to grow. However, as far as I know, there is no method to shrink a file via typical unix-style system call interfaces.



The only way to do so, as far as I know, is by faking it by creating a new shorter file and rename() it in place of the older one.



I just wanted confirmation, because I saw an answer that implied that it was possible to make file editors that worked directly on a file instead of going through the process of making a new one and renaming it in place.



I've always thought that the file api in libc and unix-style system call interfaces did not allow for the shrinking of files to ease implementation of filesystems and maybe avoid usage patterns that might contribute to fragmentation.










share|improve this question



























    1















    Is there a way to open() a file and cause it to shrink? One can, of course, open them in append-mode or seek to the end and write to cause them to grow. However, as far as I know, there is no method to shrink a file via typical unix-style system call interfaces.



    The only way to do so, as far as I know, is by faking it by creating a new shorter file and rename() it in place of the older one.



    I just wanted confirmation, because I saw an answer that implied that it was possible to make file editors that worked directly on a file instead of going through the process of making a new one and renaming it in place.



    I've always thought that the file api in libc and unix-style system call interfaces did not allow for the shrinking of files to ease implementation of filesystems and maybe avoid usage patterns that might contribute to fragmentation.










    share|improve this question

























      1












      1








      1








      Is there a way to open() a file and cause it to shrink? One can, of course, open them in append-mode or seek to the end and write to cause them to grow. However, as far as I know, there is no method to shrink a file via typical unix-style system call interfaces.



      The only way to do so, as far as I know, is by faking it by creating a new shorter file and rename() it in place of the older one.



      I just wanted confirmation, because I saw an answer that implied that it was possible to make file editors that worked directly on a file instead of going through the process of making a new one and renaming it in place.



      I've always thought that the file api in libc and unix-style system call interfaces did not allow for the shrinking of files to ease implementation of filesystems and maybe avoid usage patterns that might contribute to fragmentation.










      share|improve this question














      Is there a way to open() a file and cause it to shrink? One can, of course, open them in append-mode or seek to the end and write to cause them to grow. However, as far as I know, there is no method to shrink a file via typical unix-style system call interfaces.



      The only way to do so, as far as I know, is by faking it by creating a new shorter file and rename() it in place of the older one.



      I just wanted confirmation, because I saw an answer that implied that it was possible to make file editors that worked directly on a file instead of going through the process of making a new one and renaming it in place.



      I've always thought that the file api in libc and unix-style system call interfaces did not allow for the shrinking of files to ease implementation of filesystems and maybe avoid usage patterns that might contribute to fragmentation.







      files filesystems






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked 3 hours ago









      JoLJoL

      1,096311




      1,096311






















          1 Answer
          1






          active

          oldest

          votes


















          4














          man -s 2 ftruncate says



          DESCRIPTION
          The truncate() and ftruncate() functions cause the regular file
          named by path or referenced by fd to be truncated to a size of precisely
          length bytes.


          ...



          CONFORMING TO
          POSIX.1-2001, POSIX.1-2008, 4.4BSD, SVr4 (these calls first appeared in 4.2BSD).


          it goes on to say that if you use ftruncate you must have opened the file for writing, and if you use truncate the file must be writable.






          share|improve this answer























            Your Answer








            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "106"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f496104%2fdo-typical-system-call-interfaces-allow-reducing-the-size-of-a-file-without-rep%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            4














            man -s 2 ftruncate says



            DESCRIPTION
            The truncate() and ftruncate() functions cause the regular file
            named by path or referenced by fd to be truncated to a size of precisely
            length bytes.


            ...



            CONFORMING TO
            POSIX.1-2001, POSIX.1-2008, 4.4BSD, SVr4 (these calls first appeared in 4.2BSD).


            it goes on to say that if you use ftruncate you must have opened the file for writing, and if you use truncate the file must be writable.






            share|improve this answer




























              4














              man -s 2 ftruncate says



              DESCRIPTION
              The truncate() and ftruncate() functions cause the regular file
              named by path or referenced by fd to be truncated to a size of precisely
              length bytes.


              ...



              CONFORMING TO
              POSIX.1-2001, POSIX.1-2008, 4.4BSD, SVr4 (these calls first appeared in 4.2BSD).


              it goes on to say that if you use ftruncate you must have opened the file for writing, and if you use truncate the file must be writable.






              share|improve this answer


























                4












                4








                4







                man -s 2 ftruncate says



                DESCRIPTION
                The truncate() and ftruncate() functions cause the regular file
                named by path or referenced by fd to be truncated to a size of precisely
                length bytes.


                ...



                CONFORMING TO
                POSIX.1-2001, POSIX.1-2008, 4.4BSD, SVr4 (these calls first appeared in 4.2BSD).


                it goes on to say that if you use ftruncate you must have opened the file for writing, and if you use truncate the file must be writable.






                share|improve this answer













                man -s 2 ftruncate says



                DESCRIPTION
                The truncate() and ftruncate() functions cause the regular file
                named by path or referenced by fd to be truncated to a size of precisely
                length bytes.


                ...



                CONFORMING TO
                POSIX.1-2001, POSIX.1-2008, 4.4BSD, SVr4 (these calls first appeared in 4.2BSD).


                it goes on to say that if you use ftruncate you must have opened the file for writing, and if you use truncate the file must be writable.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered 3 hours ago









                icarusicarus

                5,8361929




                5,8361929






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Unix & Linux Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f496104%2fdo-typical-system-call-interfaces-allow-reducing-the-size-of-a-file-without-rep%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    404 Error Contact Form 7 ajax form submitting

                    How to know if a Active Directory user can login interactively

                    TypeError: fit_transform() missing 1 required positional argument: 'X'