feat(fs): add sys_dup3 (#755)

* feat(fs): add sys_dup3
This commit is contained in:
zwb0x00
2024-04-23 19:35:02 +08:00
committed by GitHub
parent 3b799d13be
commit 40348dd8d5
6 changed files with 95 additions and 0 deletions

1
user/apps/test_dup3/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
test_dup3

View File

@ -0,0 +1,20 @@
ifeq ($(ARCH), x86_64)
CROSS_COMPILE=x86_64-linux-musl-
else ifeq ($(ARCH), riscv64)
CROSS_COMPILE=riscv64-linux-musl-
endif
CC=$(CROSS_COMPILE)gcc
.PHONY: all
all: main.c
$(CC) -static -o test_dup3 main.c
.PHONY: install clean
install: all
mv test_dup3 $(DADK_CURRENT_BUILD_DIR)/test_dup3
clean:
rm test_dup3 *.o
fmt:

View File

@ -0,0 +1,30 @@
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main() {
int fd = open("/history_commands.txt", O_RDONLY);
if (fd < 0) {
perror("Failed to open file");
return 1;
}
int new_fd = 777;
int rt = dup3(fd, new_fd, O_CLOEXEC);
if (rt < 0) {
perror("Failed to duplicate file descriptor with flags");
}
char buffer[100];
int bytes_read = read(new_fd, buffer, sizeof(buffer));
if (bytes_read < 0) {
perror("Failed to read data");
return 1;
}
printf("Data:\n %.*s\n", bytes_read, buffer);
close(fd);
close(new_fd);
return 0;
}

View File

@ -0,0 +1,22 @@
{
"name": "test_dup3",
"version": "0.1.0",
"description": "测试dup3",
"task_type": {
"BuildFromSource": {
"Local": {
"path": "apps/test_dup3"
}
}
},
"depends": [],
"build": {
"build_command": "make install"
},
"install": {
"in_dragonos_path": "/bin"
},
"clean": {
"clean_command": "make clean"
}
}