C 低级标准输入接受文件名,然后将文件内容打印到标准输出

2023-11-30

我想通过标准输入从用户那里获取文件名,使用 open() 打开文件并将其分配给文件描述符,然后将该文件的内容打印到标准输出。这是我的代码,它不能正常工作。

问题:

  1. printf("输入文件名");声明永远不会出现
  2. 它永远不会打开文件;相反,无论用户输入什么,都会打印到屏幕上,然后打印“没有这样的文件或目录”错误消息,然后程序退出
  3. 程序存在后,我看到在终端提示之前打印了“输入文件名”

CODE:

    {
        printf("Enter the filename: ");
        read(STDIN_FILENO, userInput, sizeof(userInput));
        if((input_file1 = open(userInput, O_RDONLY)) < 0)
        {
            perror(userInput);
            exit(1);
        }

        while((n = read(input_file1, buffer, sizeof(buffer))) > 0)
        {
            if((write(STDOUT_FILENO, buffer, n)) < 0)
            {
                perror("failed to write to standard-out");
                close(input_file1);
                exit(1);
            }
        }
    }

Console:

machine{user1}168: ls // to show that the file exists
a.out  backup  file1 
machine{user1}170: ./a.out
file1 // this is user input
file1 // this is printed for no reason
: No such file or directory // ????
Enter the filename: machine{user1}171: // now the prompt is printed...? 

<stdio.h>输入/输出例程是buffered (see stdio(3) & 设置缓冲区(3)。你需要打电话冲洗(3)(在最近的 libc 上,隐含地要求stdout如果你阅读fgets or scanf)。你真的应该避免混合文件描述符和FILE处理相同的输出或输入(参见文件号(3)但总是打电话fflush....)。 所以更换

         printf("Enter the filename: ");
         read(STDIN_FILENO, userInput, sizeof(userInput));

with

         printf("Enter the filename: \n");
         fflush(NULL);
         if (!fgets(userInput,sizeof(userInput),stdin))
           { perror("fgets"); exit(EXIT_FAILURE); };

其实这里的fflush如果您保留非常重要的终止,则可以避免\n(新队)。如果你不想要任何换行符,你最好打电话fflush(但有些 libc 正在为你调用它)。

Calling fflush too much or too often is much less harmful (because on all already flushed stream it is a no-op) than calling it too little or not enough.

但你应该了解获取线路(3)(以避免固定长度的行)。在 Linux 和 GNU 系统上readline值得使用:它使您能够给出性感的提示,并且您的用户可以编辑键入的行。

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

C 低级标准输入接受文件名,然后将文件内容打印到标准输出 的相关文章

  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 将 Excel 导入到 Datagridview

    我使用此代码打开 Excel 文件并将其保存在 DataGridView 中 string name Items string constr Provider Microsoft Jet OLEDB 4 0 Data Source Dial
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个

随机推荐

  • 复制网页浏览器控件中的所有文本

    是否可以从导航到的网站中抓取所有文本WebBrowser不看源码就能控制 当人们不需要标题或网页的非主要部分中的任何信息时 大卫 沃克的方法非常有用 如果需要内部文本之外的内容 只有两种选择 一种是使用 getElement 进行解析 另一
  • 使用 Tkinter 处理未捕获的异常

    在我的 Tkinter Python 应用程序中 我尝试使用sys excepthook处理未捕获的异常 但我的处理程序从未被调用 堆栈跟踪仍然打印出来 如何处理 Tkinter 应用程序中未捕获的异常 这是一个简单的例子 展示了我的尝试
  • 将 StringVector 与 Rcpp 连接

    我不知道如何用 Rcpp 连接 2 个字符串 虽然我怀疑有一个明显的答案 但文档对我没有帮助 http gallery rcpp org articles working with Rcpp StringVector http galler
  • MinHash Spark ML 中与 OR 条件的字符串相似度

    我有两个数据集 第一个是大型参考数据集 第二个数据集将通过 MinHash 算法从第一个数据集找到最佳匹配 val dataset1 x y a b dataString x y a John Smith 55649 28200 John
  • JQuery Mobile 和 Google 地图故障

    我需要在我的移动应用程序的多个页面上显示 Google 地图 该应用程序使用 JQuery Mobile 框架 我的应用程序只是一个 Android 应用程序 使用 webview 并加载存储在 asset 目录中的本地 html 页面 和
  • 方案延续:顶层和非顶层的 call 'call/cc' 有什么区别?

    此代码按预期工作 define saved f cons wo call cc lambda k set saved k saved ca 输出 球拍控制台 wo wo ca 但是当我将它包装在一个函数中并调用它时 程序永远不会停止 为什么
  • 如何查找员工部门变动?

    我有一张表 其中包含各个员工的旧部门和新部门 EmployeeID OldDept NewDept 123 Design Design 234 Software Engineering 345 Design Software 456 Adv
  • Elmah 1.2 不会在 Windows 2008 IIS7.5 集成模式上登录到 SQL(但可以在本地运行)

    我正在构建一个新的 Web Forms aspnet 4 0 网站 并使用 NuGet 安装了 Elmah 1 2 我在 web config 中添加了一行以登录到 sql server express 并创建了相关表和 3 个存储过程 本
  • 为什么 JavaScript“this”在 Node 和 Browser 环境中返回不同的值?

    看完凯尔 辛普森的高级 JavaScript在 Pluralsight 课程上 我创建了一个简单的代码片段来尝试this捆绑 我通常在 SublimeText 编辑器中工作 并在其中配置节点构建引擎 有时我也在浏览器中运行相同的代码 我注意
  • 创建 Chrome 扩展内容脚本时未定义函数

    我正在编写一个 Chrome 内容脚本 当我将其注入 DOM 时 a href Hi a 它工作正常 当我单击它时会弹出警报 但是如果我为警报创建一个函数 它会说函数未定义 前任 a href Hi a function alertPlea
  • 如何提高 BLE 应用程序的吞吐量?

    我有一个作为中央设备的 Android 客户端 并且在我的 MAC 外设 上有一个应用程序 该中央设备连接到该应用程序并发送数据 此时 在调用 writeCharacteristic 后 我需要等待近 100ms 才能收到 onCharac
  • 在 Powershell 中匹配两个单词之间的所有内容

    我有一个大文本文件 其中 EXEC SQL END EXEC 块之间包含 SQL 查询 我需要 EXEC SQL END EXEC 之间的所有内容 关键词 输入示例如下 这就是我正在尝试做的事情 如果有一个 EXEC SQL END EXE
  • PropertyValuesHolder:无法找到值类型为 float 的属性 alpha 的 setter/getter

    我认为 nineoldandroids 是一个 API 低于 HONEYCOMB 的框架 那我错了什么 我的 HTC Android 2 2 1 抛出此错误 无法找到值类型为 float 的属性 alpha 的 setter getter
  • C++ 互操作:在 UDT 中嵌入数组

    我的应用程序涉及托管 C 和非托管 C 代码之间的大量通信 我们使用的是 Visual Studio 2005 并且使用 tlbimp 自动生成的互操作程序集 我们很幸运能够将简单的结构作为函数参数来回传递 因为我们的对象相当简单 所以我们
  • 如何在不改变源的情况下返回结果?

    我的 HTML 和 JavaScript 代码如下所示
  • 使用 GSON 和 TypeAdapter 将 BSON (mongoDB) 读入 POJO

    我正在寻找一种使用 GSON 将 MongoDB 文档读入 POJO 的方法 它工作得很好 直到你遇到像日期和长整型这样的东西 我想为 Gson 编写一个自定义适配器 它将转换任何 BSON 编码长 阅读this帖子我创建了自己的适配器 p
  • Java代理无法转换我的项目中的所有类

    长话短说 我需要转换程序中的每个类 甚至是 java在我的代理之前加载的库 我已经找到办法了 但还没有完全发挥作用 我对新想法持开放态度 我的实际方法表现得很奇怪 它应该在文件和控制台中打印相同的名称 但事实并非如此 我确信这些类能够达到我
  • git 中什么时候认为 2 个补丁相等?

    当我阅读时出现了我的问题git 变基文档 that 如果上游分支已经包含您所做的更改 例如 因为你邮寄了一个在上游应用的补丁 那么 提交将被跳过 例如 在 以下历史 其中 A 和 A 引入相同的集合 更改 但具有不同的提交者信息 A B C
  • PHP:使用编辑距离来匹配单词

    我一直在阅读和测试 php 中的一些示例编辑 比较 input 和 words 输出 比较 input hw r u my dear angel array of words to check against words array app
  • C 低级标准输入接受文件名,然后将文件内容打印到标准输出

    我想通过标准输入从用户那里获取文件名 使用 open 打开文件并将其分配给文件描述符 然后将该文件的内容打印到标准输出 这是我的代码 它不能正常工作 问题 printf 输入文件名 声明永远不会出现 它永远不会打开文件 相反 无论用户输入什