Tag: io redirection

使用execvp在输出重定向期间接收错误代码

我试图将输出从ls重定向到我在C中创建的shell中的文件。我输入: ls > junk 我得到的是: ls: cannot access >: No such file or directory 然后,如果我使用CTRL-D退出shell,它会在退出之前将ls命令的结果打印到屏幕。 我尝试使用print语句来确定它发生的位置,并且在以下情况之后不打印任何打印语句: dup2(f, STDOUT_FILENO); Also tried dup2(f, 1); 码: pid = fork(); if(pid == 0) { // Get the arguments for execvp into a null terminated array for(i = 0; i “) == 0) //numargs is the number of arguments typed […]

如何在Python中重定向stderr? 通过Python C API?

这是我最近两个问题的组合: [1] C中的Python实例方法 [2] 如何在Python中重定向stderr? 我想从python脚本中记录stdout和stderr的输出。 我想问的是,根据[1]创建一个新类型似乎相当复杂。 如果不需要将新类型暴露给Python,它是否简化了事情,即它只存在于C中? 我的意思是,当Python打印出来的东西时,它会转到“Objects / fileobject.c”,然后在“PyFile_WriteObject”中检查它是否可以写入其参数: writer = PyObject_GetAttrString(f, “write”); if (writer == NULL) … 此外,有可能像这样得到stdout和stderr: PyObject* out = PySys_GetObject(“stdout”); PyObject* err = PySys_GetObject(“stderr”); 我的问题是,是否有可能构造必要的PyObject,它满足上面的’PyObject_GetAttrString(f,“write”)’并且可以调用,所以我可以写: PySys_SetObject(“stdout”, ); http://docs.python.org/c-api/sys.html?highlight=pysys_setobject#PySys_SetObject 这样,就没有必要将新的“writer类型”暴露给Python脚本的其余部分,所以我认为编写代码可能会有点简单……?

将标准错误重定向到C中的字符串

我希望能够将stderr重定向到C字符串,因为我需要在我正在编写的程序中使用该字符串。 我想避免写入文件(在硬盘上)然后读取文件以获取字符串。 完成这项工作的最佳方法是什么?

如何将重定向运算符’>’作为execv的参数传递?

在linux终端中,我可以输入 echo hello! > /path/to/file 我以为我可以用execv做同样的事情: #include #include #include int main(void){ char *write_cmd[] = { “echo”, “hello!”, “>”, “/path/to/file”, NULL}; if (fork() == 0){ execv(“/bin/echo”, write_cmd); } else{ sleep(1); } return 0; } 但是,这段代码不写’你好!’ 到文件,这是我想要它做的。 有没有其他方法使用execv和echo来做到这一点? 编辑:我也尝试过使用dup2作为解决方案:#include #include #include int main(void){ char *write_cmd[] = { “echo”, “hello!”, NULL }; if (fork() == 0){ int tmpFd […]

如何将控制台输出重定向到文件?

我是c的新手。 有没有简单的方法使用一些通用命令行\ linkage参数将所有控制台的输出(printfs等)重定向到一个文件(无需修改任何原始代码)? 如果是这样的程序是什么?

fork()打印前的语句两次

我正在尝试使用fork()并重新定向以检查父项中的重定向是否也适用于孩子。 我写了以下简单的程序 #include #include #include int main () { freopen( “error.txt”, “w+t”, stdout ); // From now on, stdout = error.txt printf (” ERROR! WHY DONT U UNDERSTAND?\n”); if ( fork() == 0 ) { printf(” I AM CHILD\n”); exit(0); } else- { printf (” EITHER I AM A PARENT OR SOMETHING GOT SCREWED\n”); } […]

调用execvp()内部的重定向无法正常工作

我一直在实现一个使用execvp()执行给定命令的小程序。 不使用重定向时它工作正常,但是当我运行如下命令时: cat file1.txt > redirected.txt cat输出以下错误消息并失败: cat: >: No such file or directory cat: redirected.txt: No such file or directory 我已经做了一些挖掘,我开始认为也许execvp()不允许进行重定向,因为它不在shell中运行。 这是否意味着我必须在重定向发生时手动选择并在fork / exec代码中使用管道来解决这个限制? 有没有比使用execvp()更好的方法? 谢谢!

在C中如何打印在shell中重定向为输入的文件的文件名

$cc ac $./a.out < inpfilename 我想在stdout上打印inpfilename。 我怎么做 ? 我在这里先向您的帮助表示感谢…

如何使用CreateProcess将输出重定向到文件?

我尝试使用CreateProcess来运行一个简单的命令,如hg > test.txt 。 我尝试将字符串作为一个整体运行(而不是将其分成应用程序名称及其参数)。 为什么CreateProcess(0, “notepad.exe test.txt”, …)工作但CreateProcess(0, “hg > test.txt”, …)不起作用?