将 fseek 与指向 stdin 的文件指针结合使用

2023-11-25

根据命令行参数,我设置一个文件指针指向指定文件或标准输入(用于管道传输)。然后,我将此指针传递给许多不同的函数以从文件中读取。这是获取文件指针的函数:

FILE *getFile(int argc, char *argv[]) {
    FILE *myFile = NULL;
    if (argc == 2) {
        myFile = fopen(argv[1], "r");
        if (myFile == NULL)
           fprintf(stderr, "File \"%s\" not found\n", argv[1]);
    }
    else
        myFile = stdin;
    return myFile;
}

当它指向 stdin 时,fseek似乎不起作用。我的意思是我使用它然后使用fgetc我得到了意想不到的结果。这是预期的行为吗?如果是,我如何移动到流中的不同位置?

例如:

int main(int argc, char *argv[]) {
    FILE *myFile = getFile(argc, argv); // assume pointer is set to stdin
    int x = fgetc(myFile); // expected result
    int y = fgetc(myFile); // expected result
    int z = fgetc(myFile); // expected result

    int foo = bar(myFile); // unexpected result

    return 0;
}

int bar(FILE *myFile) {
    fseek(myFile, 4, 0);
    return fgetc(myFile);
}

是的,这是完全正常的fseek不起作用stdin——它通常只适用于磁盘文件或相当类似的文件。

虽然这确实是 POSIX 的东西,但你通常可以使用if (isatty(fileno(myFile)))至少可以很好地了解查找是否适用于特定文件。在某些情况下,isatty and/or fileno将有一个前导下划线(例如,IIRC 是随 Microsoft 编译器提供的版本)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 fseek 与指向 stdin 的文件指针结合使用 的相关文章

  • 氧图。如何将轴旁边的值格式从 1000 更改为 1k

    我正在尝试更改轴旁边的值的格式 例如从 1000 更改为 1k 或 1000000 更改为 1M 这在 LinearAxis 中可能吗 这是我的代码 m Axes Add new LinearAxis Position AxisPositi
  • TCP客户端;网络流;异步读取; C#

    请原谅我对任务和异步缺乏了解 使用 TcpClient 类 我正在创建与可用服务器的连接 void async RunClientAsync TcpClient client new TcpClient try await client C
  • OpenGL,如何独立旋转对象?

    到目前为止我的代码 void display void glClear GL COLOR BUFFER BIT GL DEPTH BUFFER BIT Clear Screen And Depth Buffer glLoadIdentity
  • 用C#发送USSD?

    我想编写一个在 Windows Mobile 6 上运行的简单 C 应用程序 它可以发送 USSD 消息 有没有任何图书馆可以帮助我做到这一点 或者是否有任何示例解释如何使用线路发送USSD http msdn microsoft com
  • 更新 OSX 命令行工具 6.3 后缺少 C++ 标头 <__debug>

    从 App Store 更新到 Command Line Tools 6 3 后 程序包括
  • 模板“内联”函数的静态局部变量[重复]

    这个问题在这里已经有答案了 static的局部变量inline如果我的理解是正确的 C 中的函数保证像单个全局变量一样存在 如果inline函数是一个模板 编译器可以在哪里生成该函数的多个版本 下面这篇文章应该很好地回答你的问题 http
  • C++ fill() 与 uninitialized_fill()

    您好 我是初学者 我想知道容器的 fill 和 uninitialized fill 之间的区别 我在谷歌上进行了快速搜索 但没有得到很好的答案 有人可以帮助我吗 fill 将值 使用赋值运算符 分配给已构造的对象 uninitialize
  • 尝试缓冲区溢出

    我正在尝试使用缓冲区溢出来更改函数的结果 以使用以下代码更改堆栈上的结果 include
  • 具有多重继承的不明确基数

    我正在尝试在一个大库中编写一些类的子类 我收到 基础不明确 错误 这是该问题的一个可编译示例 include
  • 在JAVA中将数据写入.txt文件?

    我想知道是否是在JAVA中将计算的数据写入文本文件 我的 JAVA 代码是一个基于 GUI 的 gpa 计算器 我只想添加一个 JButton 和 ActionListener 它将类名 GPA 点和计算出的 GPA 写入 txt 文件 这
  • 通过 MVC 将数据写入数据库的最佳方法是什么?

    我正在使用 MVC 和 EF Core 开发一个家庭作业项目 我正在寻找将数据写入数据库的最佳方法 我是初学者 有两张桌子 Predbilje ba 报名 和Seminari 研讨会 public class Predbilje ba Ke
  • 从 TFS 下载工作项附件(文件已损坏)

    我正在尝试创建 C 代码 因此我可以自动从 Team Foundation Server 下载 BUGS 预定义查询的所有附件 该代码似乎工作得很好 但所有下载的文件都因意外原因而损坏 我无法查看它们 有人可以看一下代码并分享意见吗 非常感
  • C# 的 xml 序列化中是否有一个属性可以跳过空数组?

    C 的 xml 序列化中是否有一个属性可以跳过空数组 这将提高 xml 输出的可读性 好吧 你也许可以添加一个ShouldSerializeFoo method using System using System ComponentMode
  • 将纬度/经度转换为 X/Y,以便在美国地图图像上进行阿尔伯斯投影

    我正在尝试使用 C 或 Javascript 将纬度 经度转换为 X Y 坐标 以将带有 CSS 的 div 左 上 定位到美国地图的背景图像上 美国的标准地图投影是阿尔伯斯投影 如下所示 但 StackOverflow 仅提供参考基本墨卡
  • 如何将此 Boost ASIO 示例应用到我的应用程序中

    我已经阅读了很多 ASIO 示例 但我仍然对如何在我的应用程序中使用它们感到困惑 基本上 我的服务器端需要接受超过100个连接 客户端 这部分是通过使用线程池 通常每个CPU核心2 4个线程 来完成的 为简单起见 我们假设只有一个连接 为了
  • 使用 System.Json 迭代 JSON

    我正在探索 NET 4 5 的功能System Json库 但没有太多文档 而且由于流行的 JSON NET 库 搜索起来相当棘手 我基本上想知道 我如何循环一些 JSON 例如 People Simon Age 25 Steve Age
  • Lambda 按值捕获和“mutable”关键字

    关键词的必要性mutable在 lambda 中 是造成极大混乱的根源 考虑代码 int x 10 function
  • 在运行时将项目添加到 ToolStrip

    您好 我有一个带有 收藏夹 菜单的 ToolStripMenu 我想在运行时在 WinForms 应用程序中添加子项目 我有一个 datagridview 右键单击它会显示一个包含 添加到收藏夹 选项的上下文菜单 当该事件被触发时 我想使用
  • 具有两个表的谓词构建器

    A Party可以有一个或多个Contact对象 我想选择全部Parties谁的街道名称包含特定关键字 如果我只想搜索Party我可以使用下面的代码 但我如何扩展它来搜索Contact public IQueryable
  • 使用 /clr 或 clr:pure(cpprestsdk 又名 casablanca)编译时不支持互斥

    我创建一个CLR project in visual c with 64 bit配置 并尝试使用cpprestsdk aka casablanca 64bit 但是当我运行项目时 出现了错误 1 gt Build started Proje

随机推荐

  • 找出 Windows 的安装语言为

    我遇到一个问题 用户设置的区域设置 德语 与安装的语言 Windows 英语 不同 有没有办法发现安装的 Windows 语言与用户设置的区域设置 我应该注意的问题是我正在创建共享 并且根据区域设置设置权限 因此如果用户将区域设置设置为德语
  • LFSR 实现中的高效位调整

    虽然我有一个很好的 LSFR C 实现 但我想我会在 Haskell 中尝试同样的方法 只是看看它是如何进行的 到目前为止 我的想法比 C 实现慢两个数量级 这就引出了一个问题 如何提高性能 显然 位调整操作是瓶颈 分析器也证实了这一点 这
  • 如何在 Node Js 应用程序的多个实例之间同步对象

    Node JS 应用程序中是否有任何对象可以锁定 是否有多个应用程序实例可用 某些功能不应并发运行 如果实例 A 功能完成 它应该解锁该对象 密钥或某些标识符 并且应用程序的 B 实例应该检查其解锁是否应该运行某些功能 任何对象或密钥都可以
  • 通过 BinaryReader 将字节数组解压缩为字符串会产生空字符串

    我正在尝试解压缩字节数组并使用二进制读取器将其转换为字符串 当执行以下代码时 inStream 位置从 0 更改为数组的长度 但 str 始终是空字符串 BinaryReader br null string str String Empt
  • JavaScript 方括号函数调用

    当我浏览 jQuery 源代码时 我遇到了这一行 jQuery this state show hide 相比之下有什么优势吗 state jQuery this show jQuery this hide 独立示例 var object
  • Google App Engine 和 Google Compute Engine 有什么区别?

    我想知道 App Engine 与 Compute Engine 之间有什么区别 谁能向我解释其中的区别吗 应用引擎是一个平台即服务 这意味着您只需部署代码 平台就会为您完成其他所有事情 例如 如果您的应用程序非常成功 App Engine
  • 可变参数模板递归返回类型推导编译错误

    为什么下面的代码不能编译 template
  • 为什么 fclose 会挂起/死锁? (视窗)

    我有一个目录更改监视器进程 它从一组目录中的文件读取更新 我有另一个进程 可以对这些目录中的大量文件执行少量写入 测试程序 想象一下大约 100 个目录 每个目录有 10 个文件 每秒修改大约 500 个文件 运行一段时间后 目录监视器进程
  • “错误:‘myfn’声明为返回函数的函数”是什么意思?

    我正在尝试编写一个返回函数指针的函数 这是我的最小示例 void myfn int Doesn t work supposed to be a function called myfn that returns a pointer to a
  • 使用 THREE.Frustum 计算近/远平面顶点

    我需要一些帮助来处理 THREE Frustum 对象 我的问题 我需要计算近 远平面顶点 我已经看过这些教程 http www lighthouse3d com tutorials view frustum culling view fr
  • 使用php在谷歌云存储桶中创建文件夹

    我对谷歌云存储非常陌生 我想使用 php 编码在存储桶中创建文件夹 我搜索了很多网站 在 1 上我看到它是这样写的 在存储桶内创建文件夹将创建一个以目录命名的占位符对象 没有数据内容和 mimetype application x dire
  • 如何在 Flutter WebView 中将数据发布到 URL

    我想将一些数据发布到 Flutter WebView 中的 URL 主体 那么 我该怎么做呢 webview flutter目前没有发送帖子请求的方法 不过 你可以试试我的flutter inappwebview插入 它支持POST请求 使
  • Vue.js - 在 v-for 中使用过滤器

    我有一个简单的 Vue 过滤器 它将数组的长度限制为 n 个元素 像这样使用它效果很好 array limitArray 2 现在我想在里面使用它v for循环 像这样 li li 但这会引发错误 如何在内部使用过滤器v for 编辑 可能
  • like 子句 JPQL 中的参数

    我正在尝试使用 like 子句编写 JPQL 查询 LIKE code 我想要 code 4 并找到 455 554 646 我无法通过 code value namedQuery setParameter this value 因为在另一
  • Android studio git 使用私钥

    A 有一个 git 仓库的地址 我还有一个 open ssh 格式的私钥 Android Studio中的git可以使用吗 我尝试搜索一些信息 但目前没有运气 感谢您提供任何有用的信息 Edit My steps 1 I put my pr
  • Bing图片搜索分页-无限滚动

    当你在Bing搜索引擎上搜索图片时 结果显示如下 http www bing com images search q stack overflow 请注意 您如何不断滚动并滚动 并且没有 正常 分页 我的问题是 他们是如何做到这一点的 我可
  • 核心转储文件名使用 core_pattern %e.%p.core 获取线程名称而不是可执行文件名称

    我最近开始使用 pthread setname np 在我的应用程序中设置一些线程名称 执行此操作后 如果指定线程之一内发生崩溃 则核心转储文件名将获取线程名称 而不是 core pattern e p core 的可执行文件名称 根据核心
  • localStorage - 清除()或removeItem()?

    我应该使用clear 抹去一切localStorage 或者我应该手动removeItem 我在该特定网站上设置的那些 很容易跟踪 我这么问是因为我不想最终消灭用户localStorage如果他们设置了其他值 我正在本地主机中测试这个并注意
  • 检测编码并将所有内容设为 UTF-8

    我从各种 RSS 源中读出大量文本并将它们插入到我的数据库中 当然 提要中使用了几种不同的字符编码 例如UTF 8 和 ISO 8859 1 不幸的是 文本编码有时会出现问题 例子 Fu ball 中的 在我的数据库中应如下所示 如果是 则
  • 将 fseek 与指向 stdin 的文件指针结合使用

    根据命令行参数 我设置一个文件指针指向指定文件或标准输入 用于管道传输 然后 我将此指针传递给许多不同的函数以从文件中读取 这是获取文件指针的函数 FILE getFile int argc char argv FILE myFile NU