当前位置: 首页 > news >正文

dup函数-文件描述符

#include<stdio.h> // 引入标准输入输出库
#include<stdlib.h> // 引入标准库
#include<string.h> // 引入字符串处理库
#include<unistd.h> // 引入Unix标准库,包含文件操作相关的函数
#include<pthread.h> // 引入线程库(虽然这个代码没有使用多线程)

int main(int argc,char *argv[]) {
// 主函数,argc 是参数个数,argv 是参数数组
int fd=open(argv[1],O_RDONLY);
// 打开命令行传入的第一个参数所指的文件,以只读方式打开
// 如果打开成功,fd 将是文件描述符;否则返回 -1

int newfd=dup(fd);
// 使用 dup 函数复制文件描述符 fd,newfd 将是新复制的文件描述符
// newfd 通常是最小的未使用的文件描述符printf("newfd=%d\n",newfd);
// 输出新文件描述符的值return 0;	
// 返回 0,表示程序正常结束

}
注意事项
open 函数:

open(argv[1], O_RDONLY) 会尝试打开命令行参数中指定的文件,O_RDONLY 表示只读模式。如果文件不存在或打开失败,返回的 fd 会是 -1。
dup 函数:

dup(fd) 复制 fd,返回一个新的文件描述符 newfd,它可以用于相同的文件。
错误处理:

这段代码没有处理打开文件失败或 dup 失败的情况,实际应用中应该加入错误检查,比如检查 fd 是否为 -1,或者 newfd 是否为 -1。
缺少头文件:

代码中使用了 open 和 dup 函数,但没有包含 fcntl.h 头文件,应该加上 #include <fcntl.h>。
示例用法
如果你将这段代码编译成可执行文件,并运行:

bash
./your_program your_file.txt
argv 是一个字符指针数组,用于存储命令行传入的参数。argc 表示参数的个数,argv 中的每个元素都是一个字符串,代表传入的每个参数。

在 C 语言中,argv[0] 通常是程序的名称,argv[1] 是用户在命令行中输入的第一个参数。因此,argv[1] 通常用来接收一些特定的输入,比如文件名、选项或其他需要处理的值。

例如
假设你编译了程序为 my_program,并在命令行中运行:

bash
./my_program example.txt
argc 的值将是 2(因为有两个参数:程序名和 example.txt)。
argv[0] 将是 “./my_program”。
argv[1] 将是 “example.txt”,即用户提供的第一个参数。
在这段代码中的作用
在你的代码中:

c
int fd=open(argv[1],O_RDONLY);
这行代码尝试打开用户指定的文件,argv[1] 就是文件名。如果用户没有提供文件名,程序会访问一个未定义的数组元素,可能导致错误或崩溃。因此,在实际使用中,应添加检查,确保用户提供了足够的参数。

处理参数的示例
在代码开头添加一个参数检查,可以帮助避免潜在的问题:

c
if (argc < 2) {
fprintf(stderr, “Usage: %s \n”, argv[0]);
return 1;
}
这样,如果没有提供文件名,程序将会输出提示信息并安全地结束运行。
在这里插入图片描述
这个4可以打开访问的文件 只起到保存的作用 dup(2 )实现浅拷贝

在这里插入图片描述


http://www.mrgr.cn/news/64882.html

相关文章:

  • resnet18分类转特征提取
  • dockerdockerfiledocker-compose操作
  • RSTP的工作过程
  • 操作系统(10) (并发(2)------基于软件/硬件/操作系统层面解决两个进程之间的临界区问题/抢占式/非抢占式内核)
  • 几乎必然收敛 (almost surely convergence)
  • 2-Ubuntu/Windows系统启动盘制作
  • n1book web1信息收集
  • Boost服务器端的acceptor、io_context和socket的理解
  • 架构师备考-信息安全
  • 基于 Java 的 Spring Boot 和 Vue 的宠物领养系统设计与实现
  • JVM问题排查分析
  • 各种方法实现瀑布流
  • 026集——CAD动态效果—瞬态实现——vs CAD二次开发
  • 力扣题目解析--罗马数字转整型
  • Linux入门(2)
  • 手机App防沉迷系统
  • ValueError: images do not match
  • GB/T 28046.3-2011 道路车辆 电气及电子设备的环境条件和试验 第3部分:机械负荷(3)
  • 14. 数据的输入输出
  • 第六十三周周报 GGNN
  • scIDST:弱监督学习推断单细胞转录组数据中的疾病进展阶段
  • 数据结构与算法(1)
  • 从一到无穷大 #40:DB AI 融合
  • 第三次RHCSA作业
  • Java入门 (6) -- 动态编程的奥秘
  • 视频QoE测量学习笔记(二)