Tag: stdout

打开DOS窗口并从DLL中调出调试消息

我目前正在从labview调用DLL,但我需要能够实时调试它(因为它访问时间敏感的硬件)。 我想printf()我的错误断言消息但我不确定如何从DLL中打开DOS窗口以转储错误信息。 有没有人这样做过? 我知道我可以用文件做到这一点,我可能不得不这样做。 printf就是这样一个方便快捷的方式来做到这一点虽然:)。

如何在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和Erlang:Erlang Port示例

免责声明:该问题的作者具有Erlang的平均知识和C的基本知识。 我现在正在阅读互操作性教程用户指南 。 我已成功编译了complex.c示例,它与Erlang端口一起使用没有任何问题。 但是,我想了解实际的C代码是如何工作的。 我一般都理解它:在示例中,它从标准输入读取2个字节并检查第一个字节。 根据第一个字节,它调用foo或bar函数。 这是我现在对它的理解的极限。 所以,如果我们同时使用erl_comm.c : /* erl_comm.c */ typedef unsigned char byte; read_cmd(byte *buf) { int len; if (read_exact(buf, 2) != 2) return(-1); len = (buf[0] <> 8) & 0xff; write_exact(&li, 1); li = len & 0xff; write_exact(&li, 1); return write_exact(buf, len); } read_exact(byte *buf, int len) { int i, […]

在C中逐行读取管道

如何分离来自管道的线。 在管道中有这样的文字: HALLO:500\n TEST:300\N ADAD ADAWFFA AFAGAGAEG 我想将管道与管道分开,因为我想将值保存在变量中。 这是我的c代码: #include #include #define BUFFERSIZE 1 int main(int argc, char **argv){ unsigned char buffer[BUFFERSIZE]; FILE *instream; int bytes_read=0; int buffer_size=0; buffer_size=sizeof(unsigned char)*BUFFERSIZE; /* open stdin for reading */ instream=fopen(“/dev/stdin”,”r”); /* did it open? */ if(instream!=NULL){ /* read from stdin until it’s end */ while((bytes_read=fread(&buffer, buffer_size, 1, instream))==buffer_size){ […]

将stdout和stderr重定向到同一文件并还原它

我将我的c程序的stderr和stdout的输出重定向到两个文件,然后恢复原始的stdout和stderr: int sout = dup(fileno(stdout)); freopen(“test.txt”,”w”,stdout); int serr = dup(fileno(stderr)); freopen(“test.txt”,”a”,stderr); //some output…. dup2(sout,fileno(stdout)); close(sout); dup2(serr,fileno(stderr)); close(serr); 这就是代码示例。 这很有效。 但是我想将stdout和stderr重定向到同一个文件(以后再恢复它),以便输出按照与不重定向stderr和stdout时在控制台输出上排序的顺序相同的顺序排序。 我怎样才能做到这一点?

从stdin读取写入C中的stdout

我正在尝试编写一个猫克隆来练习C,我有这个代码: #include #define BLOCK_SIZE 512 int main(int argc, const char *argv[]) { if (argc == 1) { // copy stdin to stdout char buffer[BLOCK_SIZE]; while(!feof(stdin)) { size_t bytes = fread(buffer, BLOCK_SIZE, sizeof(char),stdin); fwrite(buffer, bytes, sizeof(char),stdout); } } else printf(“Not implemented.\n”); return 0; } 我试着echo “1..2..3..” | ./cat echo “1..2..3..” | ./cat和./cat < garbage.txt但我在终端上看不到任何输出。 我在这做错了什么? 编辑:根据评论和答案,我最终这样做: […]

如何检查stdout是否已被重定向到Windows上的NUL(在Linux上也称为/ dev / null)?

如何检查我的程序的stdout是否已重定向到NUL ? 这样我就可以避免输出数据,因为它毫无意义。 我主要需要这个用于Windows,但如果你有一个Linux解决方案,它可能对将来的其他人有所帮助,所以也可以随意发布。

c – while循环在输入错误后继续忽略scanf

我在论坛上搜索了解决方案,但仍然对我的代码产生的输出感到困惑。 所以,该程序非常简单。 它在输入处获得两个数字,直到到达文件末尾。 如果输入错误,则应将错误打印到stdout并继续进行下一对。 如果两者都是素数,它会打印出prime 。 否则,它会打印他们的GCD。 问题是,如果输入不好,即一个或两个数字实际上都不是数字,程序会跳过scanf并继续向stderr打印错误。 然而,在调试期间,我发现scanf()所有下一次迭代都会通过,它返回0 ,好像根本没有输入任何东西。 并且提示对于输入无效,因为程序不断打印到stderr。 nd和nsd分别是返回最大分频器和最大公约数的函数。 主要计划如下: #include #include “nd.h” #include “nsd.h” int main() { int a; int b; int inp_status = 0; while (1){ inp_status=scanf(” %d %d”, &a, &b); if (inp_status == EOF){ break; } else if (inp_status < 2){ fprintf(stderr, "Error: bad input\n"); } else { if […]

使用stdin和stdout使用Java与外部C程序通信

我要做的是在Java应用程序中启动C程序可执行文件,并允许它们使用stdin和stdout相互通信。 C程序将等待来自Java应用程序的命令并回显它。 我用“gnugo –mode gtp”测试了java代码(gnugo在gtp模式下与stdin和stdout通信)并且它工作正常,但我的C代码不起作用。 任何建议都会非常感激。 C代码 #include #include #include int main(void) { unsigned int byte_read; char *string, *tok; int cmd_id; int len = 64; string = (char *) malloc(len + 1); while (1) { byte_read = getline(&string,&byte_read, stdin); if (byte_read == -1) { printf(“Error reading input\n”); free(string); exit(0); // } else { printf(“Got command: […]

fflush(stdout)in c

当我在fflush(stdout)并且我在GDB中rest时,在我实际打印它之前我能知道stdout中有什么吗? 我怎么能在任何时间点知道stdout中有什么?