首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Windows上与MSVC++一起使用exec()?

如何在Windows上与MSVC++一起使用exec()?
EN

Stack Overflow用户
提问于 2021-04-26 13:21:30
回答 1查看 640关注 0票数 0

我试图将为POSIX编写的Fortran代码移植到Windows。据我所见,大多数程序都可以在Windows上编译,只需要修改几个小命令。

在程序的fortran部分中,有一行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
call system("exec xmrcc >> output.log")

问题是,windows没有任何exec命令。但是,经过一番研究,我发现在linux上,exec命令使用底层的execvp()调用。在Windows上,MSVC++提供_exec()和相关函数系列。_execlp()_execlpe()似乎是我想要的。

因此,我想用一个C函数替换fortran系统调用,这个函数将环绕execlpe()并调用程序xmrcc.exe。

但是,我不知道这些函数是如何工作的!我读过Microsoft关于exec的文档使用execl (论点)C-在windows中使用exec()。在遵循最后一个链接问题的公认答案之后,我编写了这个C代码来测试_execlp()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <windows.h>
#include <process.h>

int main()
{
    printf("started running");
    _execlp("C::\\WINDOWS\\SYSTEM32\\CMD.EXE", "cmd.exe", "/c",
 "echo", "foo",">G:\\Python\\foo.txt");
}

但是,在运行编译后的代码时,我只得到输出“开始运行”,然后返回;G:\Python中没有foo.txt文件。然后我想可能是输出重定向引起了问题,所以我删除了它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    _execlp("C::\\WINDOWS\\SYSTEM32\\CMD.EXE", "cmd.exe", "/c", "echo", "foo");

还是一无所获。它只打印“开始运行”,不打印"foo“。

我有两个主要问题:

  1. 如何在_execlp()上正确运行?(运行xmrcc.exe并将输出定向到日志)
  2. 是否有必要使用_execlpe() 来传递环境变量?(我不明白这是如何工作的)。

我正在使用MicrosoftVisualC++ v19编译器。

[请不要提及锡格温,或交友或WSL,他们不是我要找的。我知道fortran中的系统调用是不受欢迎的,但我没有编写程序,我只是在移植它。

我需要使用_execlp(),因为它完全用子进程替换调用进程,并且是最接近linux exec命令的。这是必要的,因为程序的其他部分使用PIDS,因此必须不生成具有不同PID的子进程。]

编辑:删除exec命令有效吗?与call system("xmrcc >> output.log)一样,@ChrisDodd的评论中也提到了这一点。

EN

回答 1

Stack Overflow用户

发布于 2021-04-27 03:59:18

有两件事需要修复:

  1. 冒号:'C‘之后不应该加倍
  2. _execlp期望参数列表中有一个null来检测没有更多的参数。

因此,这是可行的:

_execlp("C:\\WINDOWS\\SYSTEM32\\cmd.EXE", "cmd.exe", "/c", "echo", "baz", ">c:\\test\\bar.txt", nullptr);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67273978

复制
相关文章
linux中的vi编辑器
vim文字处理器 linux 下的vi 是一种文字编辑器,后来的升级版本是vim。vi 分为三种模式:一般模式、编辑模式、命令命令模式。它们之间的关系如下: 下面分类别解析命令: ``(注意是~那个
小小科
2018/05/04
4.3K0
linux中的vi编辑器
VI中的多行删除与复制
VI中的多行删除与复制 法一: 单行删除,:1(待删除行)d 多行删除 ,:1,10d 法二: 光标所在行,dd 光标所在行以下的N行,Ndd 方法1: 光标放到第6行, 输入:2yy 光标放到第9行, 输入:p 此方法适合复制少量行文本的情况,复制第6行(包括)下面的2行数据,放到第9行下面。 方法2: 命令行模式下输入 6,9 co 12 复制第6行到第9行之间的内容到第12行后面。 方法3: 有时候不想费劲看多少行或复制大量行时,可以使用标签来替代 光标移到起始行,输入ma 光标移到结束行,输入mb
sanmutongzi
2020/03/04
5.9K0
vi编辑器
打开文件之后默认就是命令模式,可以通过方向键移动光标的位置,也可以通过 k/j/h/l 上下左右移动光标的位置。
Qiang
2019/07/04
1.5K0
vi编辑器
vim是linux上使用最多的编辑器,熟悉这个编辑器的使用,可以大大提高我们的工作效率。
老雷PHP全栈开发
2020/07/02
1.4K0
vi编辑器
vi是UNIX和Linux系统内嵌的标准正文编辑器,是一种交互类型的正文编辑器,是一种命令行方式的正文编辑器,可以在图形界面没有启动的情况下工作,是全屏幕正文编辑器,可以用来创建和修改正文文件,操作系统管理和维护时非常有用,vi是visual interface to the ex editor 的前两个单词的首字母。使用vi编辑一个正文文件时,vi将文件中的所有正文放入一个内存缓冲区,所有的操作都是在这个内存缓冲区中进行的,可以选择将所做的修改写到磁盘上,也可以放弃这些修改,在Red Hat Linux和Oracle Linux系统上的vi编辑器实际上是vim。vim是vi improved的缩写、是一种开源的vi编辑器而且加入了许多扩展的特性。
狼啸风云
2019/01/18
2.9K0
vi编辑器配置
vi编辑器默认情况下没有行号、语法高亮、tab键退格非4位等等,需要根据需求手动编辑一下
刘开心_1266679
2019/02/14
8740
015— 删除每行中的最大值【LeetCode2500】
吃猫的鱼Code
2023/08/09
2130
015— 删除每行中的最大值【LeetCode2500】
Linux的VI编辑器
:q     退出    :q!    强行退出(不存盘)    :wq   强制性写入文件并退出。即使文件没有被修改也强制写入,并更新文件的修改时间。  :x     写入文件并退出。仅当文件被修改时才写入,并更新文件修改时间,否则不会更新文件修改时间。 用ESC键只能切换到命令状态
阳光岛主
2019/02/19
3.2K0
非正常关闭 vi 编辑器产生 swp 文件怎么删除
问题描述: 使用 vi 编辑器的时候,有时候系统提示发现交换文件 swp 已存在,导致无法编辑当前文件。那么swp 文件怎么删除呢? 分析问题: 当你打开一个文件,vi 编辑器就会生成这么一个.swp 文件防止出现意外情况(类似微软 word 的缓存文件机制),如果正常退出那么这个 swp 文件将会自动删除。 当你强行关闭 vi 或者 SSH 连接时,比如电源断了或者使用了 Ctrl+ZZ,vi 自动生成一个.swp 文件,下次你再编辑时,就会出现一些提示。 解决问题: 按照 vi 编辑器的提示,有两种情况
魏艾斯博客www.vpsss.net
2018/06/01
2.3K0
linux中vi编辑器保存文件命令_linux用vi编辑文件
1、首先进入Linux的命令行界面.在目录下创建一个用于测试的文本文件(touch filename).这里就新建了一个test12文本文件.当然这个名字是可以随便取得.
全栈程序员站长
2022/11/08
19.1K0
linux中vi编辑器保存文件命令_linux用vi编辑文件
编辑器-vi、vim的使用
vi编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下。由于不需要图形界面,vi是效率很高的文本编辑器。尽管在Linux上也有很多图形界面的编辑器可用,但vi在系统和服务器管理中的功能是那些图形编辑器所无法比拟的。
狼啸风云
2019/10/28
1.4K0
编辑器-vi、vim的使用
linux vi编辑器的使用
vi 文件名 +行数 ( 到达指定行数的位置) vi 文件名 + (直接定位到文件末尾)
云缓缓知我意
2021/04/15
2.3K0
Vi编辑器 转
vi编辑器通常被简称为vi,而vi又是visual editor的简称  。vi编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下。由于不需要图形界面,vi是效率很高的文本编辑器。尽管在Linux上也有很多图形界面的编辑器可用,但vi在系统和服务器管理中的功能是那些图形编辑器所无法比拟的。它在Linux上的地位就像Edit程序在DOS上一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。
wuweixiang
2018/08/14
5740
vi编辑器参数
竖线(|)代表光标的位置;波浪号(~)代表该行没有任何内容。如果没有 ~,也看不到任何内容,那说明这一行肯定是有空白字符(空格、tab 缩进、换行符等)或不可见字符。
用户4870038
2021/02/05
9290
Linux 学习VI编辑器
命令模式、插入模式 :wq u 回退 :q! :w /root/file 保存到别的地方
用户5760343
2022/05/20
7.6K0
Linux 学习VI编辑器
Vi编辑器使用教程
编辑器分为三种模式:(命令行模式、末行模式、插入模式) 命令行模式 进入插入模式 i:从光标当前位置开始输入 a:从目前光标所在位置的下一个位置开始输入 o:在光标所在位置的下一行首输入 I:光标所在行首插入 A:行末插入 O:在上一行插入 s:删除光标位置的一个字符然后插入 S:删除光标所在行,然后插入 插入模式到命令行 按下ESC键就可以了 移动光标(听说很正规的Linux都这样用) 数字“0”:光标移动到所在行的行首 ”G“:移动到文本的最后一行 $:移动到行尾 ^:移动到行
苦咖啡
2018/05/07
1.1K0
Linux VI文本编辑器
  学会使用 vi 编辑器是学习 Linux 系统的必备技术之一,因为一般的 Linux 服务器是没有 GUI 界面的,Linux 运维及开发人员基本上都是通过命令行的方式进行文本编辑或程序编写的。 vi 编辑器是 Linux 内置的文本编辑器,几乎所有的类 unix 系统中都内置了 vi 编辑器,而其它 编辑器则不一定,另外很多软件会调用 vi 编辑进行内容编写,例如 crontab 定时任务。较之 于其它编辑器或 GUI 编辑器,vi 编辑速度是最快的。VIM 是它的增强版本,VI 有三种基本工 作模式,分别是:
全栈程序员站长
2022/09/18
2.9K0
Linux VI文本编辑器
文本编辑器及文本处理 文本编辑器介绍 常见的Linux文本编辑器有: emacs nano gedit kedit vi vimLinux文本编辑器-emacs emacs是一款功能强大的
emacs是一款功能强大的编辑器,与其说是一款编辑器,它更像一个操作系统。emacs带有内置的网络浏览器、IRC客户端、计算器,甚至是俄罗斯方块。当然,emacs需要在图形化界面的Linux中使用。
青灯古酒
2023/10/16
8050
华为认证欧拉openEuler-HCIA文本编辑器及文本处理
emacs是一款功能强大的编辑器,与其说是一款编辑器,它更像一个操作系统。emacs带有内置的网络浏览器、IRC客户端、计算器,甚至是俄罗斯方块。当然,emacs需要在图形化界面的Linux中使用。
青灯古酒
2023/10/16
4250
点击加载更多

相似问题

vi编辑器中的^M字符

11

如何在Vi编辑器中删除CRLF

21

如何在VI编辑器中删除选定的文本?

289

如何在vi编辑器中删除多行特殊字符

10

vi(m)中的目录

117
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文