5

我一直很好奇remLinux 是如何工作的,并试图编写自己的C代码来删除文件,但是当我搜索答案时,我只得到了使用remove()系统调用的程序。

有没有其他方法可以在不使用系统调用的情况下完成这项工作,比如编写自己的代码来完成这项工作?

我已经通过C归档完成了文件的复制,但是找不到通过C删除文件的解决方案。

4

5 回答 5

11
int unlink (const char *filename)

unlink 函数删除文件名filename。函数 unlink 在头文件 unistd.h 中声明。此函数在成功完成时返回 0,在错误时返回 -1

于 2013-05-15T12:06:33.433 回答
6

如果要删除文件,请使用

remove

功能。如果您想了解标准库的幕后情况,您可以下载 glibc 的源代码(例如)并查看实现。您会看到实际上 INTERNAL_SYSCALL 将在 linux 操作系统上执行:

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

(来自 debian eglibc-2.15 包中的 /sysdeps/unix/sysv/linux/unlinkat.c)

如果您想更进一步,甚至不使用该系统调用,您将不得不实现自己的文件系统逻辑,因为文件系统系统调用只是为不同的文件系统提供了一个抽象层。

于 2013-05-15T13:43:10.560 回答
2

如果您不想使用干净、通常的方式,您可以打开 /dev/sd** 并使用您的文件系统。

顺便说一句,remove() 不是系统调用(man 3 remove)。

于 2013-05-15T12:01:02.383 回答
1

删除文件的传统方法是使用unlink(2)函数,如果 path 是文件,则从remove(3)调用该函数。

于 2013-05-15T11:57:43.613 回答
0
#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;
}
于 2018-05-13T07:11:10.953 回答