How to delete a file without using remove system call in a C program?

前端 未结 5 869
抹茶落季
抹茶落季 2021-01-06 02:39

I\'ve been curious how rem in Linux works and trying to write my own C code that can delete a file but when I searched for the answer, I only got t

相关标签:
5条回答
  • 2021-01-06 03:03

    If you want to delete a file use the

    remove
    

    function. If you want to have a look behind the scenes of the standard library, you may download the source of the glibc (e.g.) and have a look at the implementation. You will see that actually a INTERNAL_SYSCALL will be performed on linux os:

    result = INTERNAL_SYSCALL (unlink, err, 1, file);
    

    (from /sysdeps/unix/sysv/linux/unlinkat.c from the debian eglibc-2.15 package)

    If you want to go further and even not use that syscall you will have to implement your own file system logic since the file system syscall just gives an abstraction layer to different filesystems.

    0 讨论(0)
  • 2021-01-06 03:11
    int unlink (const char *filename)
    

    The unlink function deletes the file name filename. The function unlink is declared in the header file unistd.h. This function returns 0 on successful completion, and -1 on error

    0 讨论(0)
  • 2021-01-06 03:14

    If you don't want to use the clean, usual way, you can open /dev/sd** and play with your file system.

    Btw, remove() isn't a syscall (man 3 remove).

    0 讨论(0)
  • 2021-01-06 03:16

    The traditional way to delete a file is to use the unlink(2) function, which is called from remove(3), if path is a file.

    0 讨论(0)
  • 2021-01-06 03:16
    #include<stdio.h>
    #include<stdlib.h>
    #include<unistd.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    
    
    int main(){
            int status;
            pid_t pid = fork();
            if(-1 == pid){
                    printf("fork() failed");
                    exit(EXIT_FAILURE);
            }else if(pid == 0){
                    execl("/bin/sh", "sh", "-c", "rm /tmp/san.txt", (char *) NULL);
            }else{
                    printf("[%d]fork with id %d\n",pid);
                    waitpid(pid,&status,0);
            }
    return 0;
    }
    
    0 讨论(0)
提交回复
热议问题