Tag: popen

写入Fortran和C程序之间的管道时出现问题

我有一个由其他人用Fortran编写的程序,因此从标准输入中读取一些内容然后进行一些计算并输出结果。 我想要做的是使用来自另一个程序的不同输入数据多次运行它,由我用C语言编写。 要做到这一点,我使用popen : FILE *pipe = popen(“.\\program.exe”, “wt”); if (!pipe) { exit(1); } fprintf(pipe, “%d\n”, thing1); fprintf(pipe, “%d\n”, thing2); … pclose(pipe); 问题是它不能以这种方式工作。 它与“program.exe <input.txt”完美配合,但不是这种方式。 它读取第一件事然后输出这个愚蠢的错误:“IO-09系统文件错误 – 未知错误”。 当然我不知道这意味着什么,因为我从未编写过Fortran。 我究竟做错了什么? 编辑: 不幸的是,我没有该程序的源代码

用C中的popen捕获tshark标准输出

我试图通过C中的程序从tshark捕获标准输出。为此,我使用popen()调用打开tshark进程并从返回的FILE流中读取。 代码示例: #include #include int main() { FILE* pipe_fd = popen(“tshark -i eth0 -R icmp -2 -T fields -e icmp.checksum -e icmp.seq”, “r”); //FILE* pipe_fd = popen(“lsof”, “r”); if (!pipe_fd) { fprintf(stderr, “popen failed.\n”); return EXIT_FAILURE; } char buffer[2048]; while (NULL != fgets(buffer, sizeof(buffer), pipe_fd)) { fprintf(stdout, “SO: %s”, buffer); } pclose(pipe_fd); printf(“tdr FINISHED!\n”); return […]

在C中将字符串传递给popen时保留双引号

我正处于一个两难的境地,我试图在C中通过popen传递一个字符串,但是它在字符串中保留了双引号。 该字符串如下: ssh %s@%s grep -c \”%s\” %s%s 我需要运行此命令,以便从远程系统上的日志中获取grep并返回它的计数。 我通过字符串传递不同的参数,因此它生成用户名和密码以及搜索字符串和目标。 但是,搜索字符串包含由空格字符分隔的多个单词,因此我需要完整的双引号,以便正确解析搜索字符串。 但是,到目前为止,popen已经从字符串中删除了双引号,因此搜索无法完成。 我不确定另一种方法来执行远程ssh命令,或者在语句中保留双引号。 有任何想法吗? 谢谢! *编辑:这是我用来生成字符串以及popen命令的完整sprintf语句。 sprintf(command, “ssh %s@%s grep -c \”%s\” %s%s”, user, server, search, path, file); fd = popen(command, “r”);

为什么popen不与pog123沟通?

我正在为我的覆盆子pi写一个媒体服务器。 我能够创建一个程序,使用popen通过遥控器控制omxplayer。 我现在想控制mpg123音乐。 我使用与popen在omxplayer程序中工作的相同代码并将其应用于mpg123,但它无法正常工作。 它启动,但不会确认发送给它的任何输入。 我不知道为什么一个会工作而另一个不会。 这是我的代码: void play_music (char *list, int random) { FILE *pp; char c; char command[501]; struct stat buf; if(access(list, R_OK) == -1) { fprintf(stderr, “%s: play_music: access failed (%s) (%s)\n”, program_name, strerror(errno), list); exit(EXIT_FAILURE); } if(stat(list, &buf) == -1) { fprintf(stderr, “%s: play_music: stat failed (%s) (%s)\n”, program_name, strerror(errno), list); […]

C语言:popen()与fread()?

我已经被困在这几天了,它变得非常令人沮丧。 我正在使用popen()来调用命令行进程并获取其输出并将其存储在C字符串中。 我正在使用fgets()但似乎在新行之后中断,所以我使用的是fread() 。 唯一的问题是返回的C字符串有时会混乱。 这是我的代码: const char *cmd = “date”;//This the shell command char buf[BUFSIZ];//Output of the command FILE *ptr; int c; if ((ptr = popen(cmd, “r”)) != NULL) while(fread(buf, sizeof(buf),1, ptr)) while ((c = getchar()) != EOF) printf(“output = %s”, buf); (void) pclose(ptr); 最终的C字符串有时会有奇怪的字符,不应该存在,或者有时甚至没有字符串可用。 有人可以帮忙吗? ): 编辑:这是我在使用fgets()时所做的事情Shell命令可以是输出文本的任何东西。 不只是“约会”。 if ((ptr = popen(cmd, “r”)) […]

这个_popen / select示例有什么问题?

更新:我更新了代码和问题描述以反映我的更改。 我现在知道我正在尝试在nonsocket上进行Socket操作。 或者我的fd_set无效,因为: select返回-1, WSAGetLastError()返回10038。 但我似乎无法弄清楚它是什么。 平台是Windows。 我还没有发布WSAStartup部分。 int loop = 0; FILE *output int main() { fd_set fd; output = _popen(“tail -f test.txt”,”r”); while(forceExit == 0) { FD_ZERO(&fd); FD_SET(_fileno(output),&fd); int returncode = select(_fileno(output)+1,&fd,NULL,NULL,NULL); if(returncode == 0) { printf(“timed out”); } else if (returncode < 0) { printf("returncode: %d\n",returncode); printf("Last Error: %d\n",WSAGetLastError()); } else { […]

ftens返回由popen返回的FILE的错误

我正在尝试从我的C代码执行命令行,但是当我到达fgets()函数时,我得到了一个N​​ULL错误。 void executeCommand(char* cmd, char* output) { FILE *fcommand; char command_result[1000]; fcommand = popen(cmd, “r”); if (fcommand == NULL) { printf(“Fail: %s\n”, cmd); } else { if (fgets(command_result, (sizeof(command_result)-1), fcommand) == NULL) printf(“Error !”); strcpy(output, command_result); } pclose(fcommand); } 我的命令是: java -jar 为什么我有来自fgets的NULL结果,尽管当我尝试在终端中执行相同的命令时,它按预期工作。

使用popen()来调用shell命令?

通过xcode运行以下代码时,我得到了不一致的行为。 有时它会正确打印git版本,有时则不会打印任何内容。 shell命令的返回码总是为0。 关于为什么会这样的任何想法? 我究竟做错了什么? #define BUFFER_SIZE 256 int main (int argc, const char * argv[]) { FILE *fpipe; char *command=”/opt/local/bin/git –version”; char line[BUFFER_SIZE]; if ( !(fpipe = (FILE*)popen(command, “r”)) ) { // If fpipe is NULL perror(“Problems with pipe”); exit(1); } while ( fgets( line, sizeof(char) * BUFFER_SIZE, fpipe)) { // Inconsistent (happens sometimes) […]

在c中使用popen运行多个命令

我使用C创建一个程序,该程序在需要运行多个命令的linux环境中运行 sudo -s LS PWD (假设sudo -s下的命令是需要超级用户才能运行的命令) 现在,我需要做的是获取这些命令的所有输出以供进一步处理。 这是代码 int executeCommand(char *command, char *result) { /*This function runs a command./*/ /*The return value is the output of command*/ int nSuccess = -1; FILE * fp = NULL; char buffer[1035]; if (command == NULL) render(“Command is null”); if (result == NULL) render(“result is null”); if (command!=NULL […]

使用popen()在命令行中打开程序?

是否可以使用其他程序打开程序? 例如:我想在C中创建一个命令行应用程序,它将提示用户输入程序名称(比如说Microsoft Word.app),该程序将启动。 我会做这样的事情: #include #include int main (int argc, const char * argv[]) { char programName[1000]; printf(“Type in the name of the program you would like to open: “); scanf(“%s”, programName); popen(programName); } 但是,popen()要求我另一个char。 我如何使用popen()打开程序? 编辑:以下代码有效! #include #include int main (int argc, const char * argv[]) { char programName[1000]; char app[100] = “.app”; char […]