c++ - 编写时C++中的输入重定向问题

标签 c++ linux

您好,我可以使用dup2完美读取文件,但是在写入文件并使用以下命令添加文件时遇到了麻烦:

shell: ls >+ lsout
shell: cat lsout

这是处理dup2以进行写入的C++代码:
else if(write == true)
            {
                int fd = open(rCommand[1],O_WRONLY | O_APPEND);
                dup2(fd, 1);
                close(fd);
                execvp(substrings[0], substrings);
            }

Substrings数组保存在命令行中输入的参数,而rCommand [1]是试图打开或写入的文件名。

我的理解是ls> + lsout假定创建一个名为lsout的空文件,但是当执行时仅列出当前目录中的项目。任何帮助,将不胜感激

最佳答案

我在运行ls >+ lsout后发现的一件事是,它创建了一个名为+而不是lsout的文件:
$ ls >+ lsoutls: cannot access 'lsout': No such file or directory
因此,cat lsout不可避免地会引发错误:
$ cat lsout cat: lsout: No such file or directory
因此,我猜想这需要先解决,然后再继续。
另外,在进一步的研究中,我发现execvp(substrings[0], substrings);语句可能是错误的,因为execvp() takes通常是第一个参数,它是指向我们正在处理的文件的指针,但是我的推断是substrings[0]可能包含我们执行的命令而不是文件名。

而且,就像@aschepler所说的一样,请尝试发布一个更具描述性的问题,并附带错误消息和副作用,因为它对尝试解决您的问题的人很有帮助:)

最好。

关于c++ - 编写时C++中的输入重定向问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60312728/

相关文章:

c++ - 一种保护通过网络发送的数据的方法?

C++ : calling an Abstract method inside an abstract class

linux - Shell 命令到 tar 目录,不包括某些文件/文件夹

linux - grep 是如何制作颜色的?

Linux:写入被分成 512K block

c++ - 如何通过 Windows API 获取所有(非禁用)用户 SID?

c++ - 在 boolean 数组中输入

c++ - 空时访问索引0处的 vector

linux - csv 文件的两列可以用 Shell 脚本中的字符串连接吗?

c - 为 win32 && linux 定义清除函数