重定向CMD.exe输出并通过管道输入c

我试图打印输出和输入cmd命令收到stdout就像普通的cmd.exe一样。 我可以使用函数_popen但是当我启动像Python或Powershell这样的程序时,它不起作用。 所以我需要输出子进程并能够向子进程发送命令。 这里有一个类似的问题 所以我修改了这个链接的代码,如下所示: void WriteToPipe(char* command){ DWORD dwRead, dwWritten; BOOL bSuccess = FALSE; bSuccess = WriteFile(g_hChildStd_IN_Wr, command, strlen(command), &dwWritten, NULL); // Close the pipe handle so the child process stops reading. if (!CloseHandle(g_hChildStd_IN_Wr)) ErrorExit(TEXT(“StdInWr CloseHandle”)); } void ReadFromPipe(void){ DWORD dwRead, dwWritten; CHAR chBuf[BUFSIZE]; BOOL bSuccess = FALSE; HANDLE hParentStdOut = GetStdHandle(STD_OUTPUT_HANDLE); bSuccess = […]

如何通过NAT通过公共IP发送UDP数据包?

我有一个在我的专用网络上运行的UDP服务器。我有一个超出NAT的设备,它通过公共IP将UDP数据包发送到我的服务器。 我能够收到UDP数据包,解析它们,我可以查看有效负载,src和dest端口。 现在我需要向该设备发送ACK消息,以便我捕获了ip和端口号并向其发送UDP数据包。 但我无法在该设备中查看任何UDP数据包。 我的问题是因为我的设备超出NAT,我得到的IP地址和端口号是NAT还是实际的设备? 如何通过NAT将UDP数据包发送到该设备?

关于c程序中的myfopen()

我的问题是关于这个问题: c K&R fopen和fillbuf上的分段错误 。 在这个问题中,在myfopen()函数中,有一个for循环; 我不明白的是,fp将具有从_iob开始的值,但是我没有得到fp-> flag在前三个值(已经修复)之后取的值。 他们是否会采用零值,还有一个问题是在答案中(参见代码下方)他们说我们必须使用malloc为fp提供内存空间,但fp已经提供了内存空间,因为_iob数组有空格和fp将继续获取数组元素的地址,那么malloc的需求是什么?如果所有元素都为零,那么for循环总是会在fp = _iob + 3处中断吗? 其次在main()函数中,提到的模式是“r”但是后面使用的系统调用是write()虽然它没有显示错误,但为什么这可能呢? 第三,编译器在编译此代码时不显示错误或警告,但显示一个对话框,指出“f_open.exe已停止工作”,即使我们编写malloc行(或没有),或者即使有,也保持相同“r”模式或“w”模式。 那有什么不对? #include #include #include #define PERM 0644 #define EOF (-1) #define BUFSIZE 1024 #define OPEN_MAX 20 typedef struct _iobuf{ int cnt; char *ptr; char *base; int flag; int fd; } myFILE; enum _flags { _READ = 01, _WRITE = 02, […]

我能正确理解getopt()吗?

我正在尝试扫描命令行中的某些字母,符号和值。 我想扫描”-w” ,一个数字和”-s” 。 我在上一个问题中得到了回复,我被告知要使用getopt() ,经过一段谷歌搜索,我想我可能会得到它,但我不确定。 这就是我认为我在做的事情: int c = 0; int b = argv[2]; while((c = getopt(argc, argv, “-w”, “-s”, b)) 我想我正在扫描argc中的”-w” , “-s”和argv[2]值(这是数字)。 但我不知道我是否正确使用它?

在非常长的字符串中查找频率的最佳方法

我必须找到一种非常优化的方法来查找包含单词的非常长的文件中的字符频率(使用C / C ++时,忽略大小写,应该计算小写和大写)。 我已经知道一个是这个(这里我正在读取终端用户的输入,但在我的情况下我将从文件中读取,所以请不要去get()函数,请关注我的主要目标是获得一个比这更优化的方式(如果可能的话)): int main() { char string[100]; int c = 0, count[26] = {0}; printf(“Enter a string\n”); gets(string); while (string[c] != ‘\0’) { /** Considering characters from ‘a’ to ‘z’ only and ignoring others */ if (string[c] >= ‘a’ && string[c] <= 'z') count[string[c]-'a']++; c++; } for (c = 0; c < […]

将指针传递给动态数组

将指针传递给动态数组是否正确? 它会起作用吗? 如果没有,请解释为什么,如果确实如此,也解释原因。 谢谢。 struct record { char * community_name; double data[10]; double crimes_per_pop; }; void allocate_struct_array(struct record *** r); int main() { /* allocating pointer to an array of pointers */ struct record ** r; /* passing its address to a function */ allocate_struct_array( &(**r) ); } /* function gets an address */ void […]

检查指针是否在malloc’d区域?

我正在制作一个动态内存分配器,我需要检查,而不是当我释放它的一部分时,我传入函数的指针实际上是在该区域内。 我有一个指向malloc’d区域开头的指针 typedef unsigned char byte; static byte *memory // pointer to start of allocator memory 我在启动函数中分配的。 我也存储了malloc’d区域的大小 static u_int33_t memory_size; // number of bytes malloc’d in memory[] 我如何确保ptr不…(伪代码) ptr *memory + memory_size 并且该代码导致以下错误; 错误:不同指针类型的比较缺少强制转换[-Werror] if(object (memory + memory_size))^ 我不确定我需要投出什么以及什么不… 免费function如下…… void memfree(void *object) { if ( object (memory + memory_size)) { fprintf(stderr, “vlad_free: Attempt […]

ungetc上次如何获取角色会重新输入文件*

假设我有一个由fopencookie创建的FILE* ,如果我在FILE*上调用ungetc会发生什么? 假设我将FILE*上的setvbuf _IONBF为_IONBF以使其无缓冲。 看起来fopencookie不支持ungetc的处理程序。 背景是我想在istream上运行scanf ,请参阅istream对象上的scanf 。 一个建议是使用fopencookie并且我试图通过fopencookie将istream包装为FILE *,问题出来了,我需要确保FILE*没有缓冲任何东西,但是, scanf至少会提前读取一个字符解析宽度未知的字段,例如对于%d,它将继续读取,直到找到空格或行尾。 我假设scanf会通过ungetc将字符放回FILE* ,在这种情况下我需要将此字符放回到istream中。 是否有可能知道哪个字符scanf命中? 谢谢。

我正在用C语言编写一个程序,它通过BST搜索存储在txt文件中的数字,但是有一个我找不到的错误

代码的第一部分是通过二进制搜索树将整数存储在ans.txt文件中。 /*code for storin the numbers in a particulr txt file */ #include #include #include struct root{ int val ; struct root *left ; struct root *right ; }; void write(struct root *,int); // to write the numbers in a file struct root *insrt(struct root *r,int val){ struct root *p,*q; int ch,i=0; FILE *fp; if(r==NULL){ […]

编写memset函数时出现问题

我正在编写memset函数,我的代码如下,我遇到了问题 void* memsetFun(void* pointer, int c, int size) { if ( pointer != NULL && size > 0 ) { unsigned char* pChar = pointer; int i = 0; for ( i = 0; i < size; ++i) { unsigned char temp = (unsigned char) c; *pChar++ = temp; // or pChar[i] = temp (they […]