Linux实验二编写代码,完成以下功能: 1.创建新文件,该文件具有用户读写权限。 2.采用dup/dup2/fcntl复制一个新的文件描述符,通过新文件描述符向文件写入“class_name”字符串; 3.通过原有的文件描述符读取文件中的内容,并且打印显示;
时间: 2024-11-13 14:24:51 浏览: 14
在Linux环境下,你可以使用C语言的系统调用来实现这个实验。以下是一个简单的示例代码,用于完成你所提到的功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#define FILE_NAME "my_file.txt"
// 创建新文件并设置权限
void create_and_set_permissions() {
int fd = open(FILE_NAME, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
if (fd == -1) {
perror("Failed to create file");
exit(EXIT_FAILURE);
}
close(fd); // 关闭不需要的描述符
}
// 使用dup/dup2/fcntl复制文件描述符
void duplicate_descriptors(int old_fd) {
int new_fd = dup(old_fd);
if (new_fd == -1) {
perror("Failed to duplicate file descriptor");
exit(EXIT_FAILURE);
}
char class_name[] = " MyClassName";
write(new_fd, class_name, strlen(class_name));
printf("Wrote '%s' to the file using new descriptor.\n", class_name);
// 如果不想关闭原描述符,可以跳过这一步
// close(old_fd);
}
int main() {
create_and_set_permissions();
// 打开文件,假设我们已经有了一个描述符fd1
int fd1 = open(FILE_NAME, O_RDONLY);
if (fd1 == -1) {
perror("Failed to open file for reading");
exit(EXIT_FAILURE);
}
// 复制文件描述符
duplicate_descriptors(fd1);
// 从原始描述符读取文件内容
char buffer[100];
ssize_t bytes_read = read(fd1, buffer, sizeof(buffer));
if (bytes_read > 0) {
buffer[bytes_read] = '\0'; // null terminate string
printf("Read from file: %s\n", buffer);
} else if (bytes_read == 0) {
printf("End of file reached.\n");
} else {
perror("Reading from file failed");
}
// 关闭所有打开的描述符
close(fd1);
return 0;
}
```
运行此程序,它首先创建一个新文件并给予适当的权限,然后通过复制描述符向文件写入内容,最后读取文件内容并将其打印出来。
阅读全文