C以循环方式打印和存储命令行参数

我是c编程的新手,我遇到过这个实现问题。 情况是我需要使用fork()创建4个子进程以循环方式打印命令行参数,即如果输入是./abc.c RR GG EE WW BB CC DD AA ,子进程1应该存储和打印RR BB ,子进程2应存储和打印GG CC等。 最终输出应该如下所示。 Child 1, pid 23460: S5 HT DK S4 H7 S6 S8 D2 H3 H2 DT DA S9 Child 2, pid 23461: C7 HA D6 S7 SQ HK H6 H4 C3 CK S2 C9 SJ 3和4子进程有类似的输出。 问题是商店部分。 我们如何正确存储这些参数并使用printf或其他方法来产生上述输出? 一个子进程打印一行。 我无法弄清楚解决方案。 存储要求是存储Child […]

如何修复Gstreamer捕获麦克风音频和缓冲或转储为原始文件,当我说它不保存任何东西

我正在尝试捕获麦克风音频并将其另存为文件。 但它不起作用,我只能在分配时播放文件。 如何启用麦克风并将其缓冲或保存或转储为原始.odd / vorbis? #include #include static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data) { GMainLoop *loop = (GMainLoop *) data; switch (GST_MESSAGE_TYPE (msg)) { case GST_MESSAGE_EOS: g_print (“End of stream\n”); g_main_loop_quit (loop); break; case GST_MESSAGE_ERROR: { gchar *debug; GError *error; gst_message_parse_error (msg, &error, &debug); g_free (debug); g_printerr (“Error: %s\n”, error->message); g_error_free (error); […]

OpenMp检测并行区域之前嵌套并行性中的线程数

如何在并行区域启动之前检测OpenMp中的线程数? 如果我使用嵌套并行性,则环境变量OMP_NUM_THREADS看起来像4,64 。 get_nested_num_threads(); #pragma omp parallel { // starting 4 threads #pragma omp parallel { // starting 64 threads for each of the 4 } } 这个答案导致我使用以下代码查询OMP_NUM_THREADS : #include #include int get_nested_num_threads(){ char delimiter[] = “,”; char *ptr = NULL; char *num_threads = NULL; num_threads = getenv(“OMP_NUM_THREADS”); int threads=1, nested=0; ptr = strtok(num_threads, delimiter); […]

Pthread_t没有开始

我写了这个简短的例子,以便理解C中的线程编程。我应该编写“线程0”。 但是没有输出。 这是代码。 #include #include #include int i=0; pthread_mutex_t mutex; void * fonction(){ pthread_mutex_lock(&mutex); printf(“thread %d \n”,i++); pthread_mutex_unlock(&mutex); pthread_exit(NULL); } int main(){ pthread_t a; pthread_mutex_init(&mutex,NULL); pthread_create(&a,NULL,fonction,NULL); return EXIT_SUCCESS; } 有人能帮我吗 ? Ps:我用它来编译它 gcc -pthread test.c -o test

需要帮助将C函数转换为Objective C方法

我有一个用C编写的函数,它相当大,目前只在C文件的main()函数中运行,而我一直在测试它。 这是它的声明 void getData(const char* encodedBuffer, int user); 如果你想看到getData的内容,那么这就是它的pastebin。 截至目前,我只是传递encodedBuffer,我将有一个全局变量,由getData函数更新。 我想知道将这样的基于C的函数转换为Objective-C协议方法的正确方法是什么。 现在我正在这样设置它 iDriver.h(我的界面/协议) #import @protocol iDriver -(void)getData; -(void)cancel; @end DriverOne.h(实际实现协议方法的类) #import #import “iDriver.h” @interface DriverOne : NSObject @end DriverOne.m #import “DriverOne.h” @implementation DriverOne enum Status getData(char* encodedBuffer, int user) { // Copy C code which I showed in the link earlier // to above into […]

在C中重定向到输入/输出的语法(UNIX)

我试图找到一种语法,让我在使用mkfifo()函数并使用fork创建子进程后,将标准输入输出重定向到命名管道。 我应该在哪个手册页面查看语法? 谢谢,亚伦

联锁function和primefaces性:仍然困惑

我仍然对以primefaces方式读取和写入变量感到困惑。 对于那些在以前的问题中试图提供帮助的人,请提前抱歉。 今天我被告知,在读取和写入一个32位long值时,不需要任何Interlocked函数调用,这会打破我以前的信念 。 实际上,这支持了MSDN所说的内容 对正确对齐的32位变量的简单读取和写入是primefaces操作。 换句话说,您最终只会更新变量的一部分; 所有位都以primefaces方式更新 然后我看看atomic_long中的atomic_long是做什么的; 其operator=使用新值对当前值执行_InterlockedExchange() 。 这不与MSDN相矛盾; 如果读/写是primefaces的,为什么需要这个Interlocked函数? 在同一个MSDN页面上,我们也有 对64位Windows进行简单的读取和写入正确对齐的64位变量是primefaces的。 在32位Windows上,不保证对64位值的读写操作是primefaces的。 对其他大小的变量的读写不保证在任何平台上都是primefaces的。 所以我接着进入atomic_bool的’ operator= ; 它执行_InterlockedExchange8调用, MSDN告诉我该调用仅适用于Windows 8及更高版本。 这似乎支持第二个MSDN报价。 如果我使用VS 2005并针对Windows XP,我如何确保布尔变量的primefaces读/写? 我是否必须使用互斥锁或类似的? 如果读/写操作不是primefaces的,那么它就容易被撕裂; 那是对的吗? 我读过这个PAQ ,说原始类型不是primefaces的。 这再次与我在问题中告诉我的内容以及MSDN告诉我的内容相矛盾。 谁是对的?

一个简单的控制台Rubik的立方体在C(无需解决,只设计)

所以,作为初学者,这个项目给了我一个偏头痛。 当然,我不是要求任何完整的代码,我想了解逻辑和我的选择。 在大学里,我们已经涵盖(或将涵盖)的C编程主题不超过动态数组。 我们可以使用结构,函数,数组,指针而不是类,因为这是C,而不是C ++。 我很擅长解决方案,但不是谜题。 我试过的是制作一个带有6个整数的立方体结构 (代表边),然后制作一个立方体数组。 我能做的另一件事就是制作一个[6] [3] [3]数组,但我认为这会让它变得太复杂? 总结一下我的要求, 要求 控制台应用 没有花哨的图形或任何东西 没有解决方案 简单的工作立方体 可以初始化为用户输入 等级:业余 这是正确的方法吗? 你怎么认为我应该轮换一条线? 再次,不需要代码,如果你能解释主要的逻辑,我应该如何分解代码甚至伪代码,这将是伟大的。 你认为我应该使用立方体rubik[3][3][3]制作一个完整的立方体,还是处理像cube face[3][3]这样的cube face[3][3] ? 我将添加您需要的任何额外信息,以帮助解决我的问题。 编辑 – 附加信息:这是我的立方体数组(这里的编辑器搞砸了一些缩进): int cube[6][3][3] = {{{1,1,1},{1,1,1},{1,1,1}}, {{2,2,2},{2,2,2},{2,2,2}}, {{3,3,3},{3,3,3},{3,3,3}}, {{4,4,4},{4,4,4},{4,4,4}}, {{5,5,5},{5,5,5},{5,5,5}}, {{6,6,6},{6,6,6},{6,6,6}} };

将字符数组拆分为两个字符数组

我想拆分一个包含两个“字符串”的char数组,用“|”分隔 分成两个字符的char。 这是我的示例代码。 void splitChar(const char *text, char *text1, char *text2) { for (;*text!=’\0′ && *text != ‘|’;) *text1++ = *text++; *text1 = ‘\0′; for (;*++text!=’\0’;) *text2++ = *text; *text2 = ‘\0’; } int main(int argc, char* argv[]) { char *text = “monday|tuesday”, text1[255], text2 [255]; splitChar (text, text1, text2); return 0; } 我有两个问题: 如何在C中进一步改进此代码(例如,将其重写为1循环)。 […]

为什么getchar在第一次迭代后没有执行?

我编写了一个程序来逐个字符地读取输入并将其打印到输出,这是我的代码: #include main() { int c; while((c = getchar()) != EOF) { printf(“%s\n”, “log1”); printf(“%c\n”, c); printf(“%s\n”, “log2”); } } 这就是结果: a(my input) log1 a log2 log1 log2 但它应该有这个结果: a log1 a log2 这个程序有什么问题?