C 使用多个进程和pthread处理文件

C 使用多个进程和pthread处理文件,c,synchronization,pthreads,semaphore,C,Synchronization,Pthreads,Semaphore,我在进程和线程之间的同步练习中遇到了问题。主进程应该创建Nchild(使它们大致在同一时间启动),这反过来应该创建M线程。现在,这些线程必须写入文件。一段时间后,T主线程应该停止子进程并调用一个函数,该函数将查找哪个进程进行了更多访问。在文件上写什么或者主进程如何决定哪一个写得更多并不重要。 问题是:什么都没有写。该文件已创建,但什么也没有发生,我无法理解为什么。我在这上面浪费了一个下午,但我仍然无法理解到底出了什么问题(尽管我怀疑sigaction,因为我不希望用它来停止子进程)。请帮忙。这是

我在进程和线程之间的同步练习中遇到了问题。主进程应该创建Nchild(使它们大致在同一时间启动),这反过来应该创建M线程。现在,这些线程必须写入文件。一段时间后,T主线程应该停止子进程并调用一个函数,该函数将查找哪个进程进行了更多访问。在文件上写什么或者主进程如何决定哪一个写得更多并不重要。 问题是:什么都没有写。该文件已创建,但什么也没有发生,我无法理解为什么。我在这上面浪费了一个下午,但我仍然无法理解到底出了什么问题(尽管我怀疑sigaction,因为我不希望用它来停止子进程)。请帮忙。这是密码

编辑:问题不应该出现在init_file()parseOutput()中,因为它们是教授给我的,经过测试,我保持不变

这里也很常见

#include <errno.h>

#include <stdio.h>

#include <string.h>



// macros for handling errors

#define handle_error_en(en, msg)    do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)

#define handle_error(msg)           do { perror(msg); exit(EXIT_FAILURE); } while (0)
#包括
#包括
#包括
//用于处理错误的宏
#在(0)时定义句柄_error_en(en,msg)do{errno=en;perror(msg);exit(exit_FAILURE);}
#定义句柄错误(msg)do{perror(msg);退出(退出失败);}while(0)

线程函数需要类型为thread\u args\u t的参数,我传递的是NULL。我甚至不知道为什么它从来没有提出分割错误。通过对pthread_create的正确输入,一切正常。

间隔步骤-创建一个创建一个线程的进程。发生了什么?仍然是0次访问,没有任何写下主题,但您可能想知道stdout是行缓冲的。注意,如果printf()语句包含换行符(\n),则无需调用fflush()。另外,您似乎调用了fflush(fd),这不是合法的C。您是否使用最大警告级别编译?谢谢您提供的offtopic。我不知道\n导致缓冲区刷新。我删除了fflush(fd)请发布自制头文件的内容:
common.h
[Main] Child 0 accessed file accesses.log 0 times
[Main] Child 1 accessed file accesses.log 0 times
[Main] Child 2 accessed file accesses.log 0 times
[Main] Child 3 accessed file accesses.log 0 times
[Main] Child 4 accessed file accesses.log 0 times
[Main] Child 5 accessed file accesses.log 0 times
[Main] Child 6 accessed file accesses.log 0 times
[Main] Child 7 accessed file accesses.log 0 times
[Main] Child 8 accessed file accesses.log 0 times
[Main] Child 9 accessed file accesses.log 0 times
[Main] Child 10 accessed file accesses.log 0 times
[Main] Child 11 accessed file accesses.log 0 times
[Main] Child 12 accessed file accesses.log 0 times
[Main] Child 13 accessed file accesses.log 0 times
[Main] Child 14 accessed file accesses.log 0 times
[Main] Child 15 accessed file accesses.log 0 times
[Main] Child 16 accessed file accesses.log 0 times
[Main] Child 17 accessed file accesses.log 0 times
[Main] Child 18 accessed file accesses.log 0 times
[Main] Child 19 accessed file accesses.log 0 times
[Main] Child 20 accessed file accesses.log 0 times
[Main] Child 21 accessed file accesses.log 0 times
[Main] Child 22 accessed file accesses.log 0 times
[Main] Child 23 accessed file accesses.log 0 times
[Main] Child 24 accessed file accesses.log 0 times
[Main] Child 25 accessed file accesses.log 0 times
[Main] Child 26 accessed file accesses.log 0 times
[Main] Child 27 accessed file accesses.log 0 times
[Main] Child 28 accessed file accesses.log 0 times
[Main] Child 29 accessed file accesses.log 0 times
[Main] Child 30 accessed file accesses.log 0 times
[Main] Child 31 accessed file accesses.log 0 times
[Main] Child 32 accessed file accesses.log 0 times
[Main] Child 33 accessed file accesses.log 0 times
[Main] Child 34 accessed file accesses.log 0 times
[Main] Child 35 accessed file accesses.log 0 times
[Main] Child 36 accessed file accesses.log 0 times
[Main] Child 37 accessed file accesses.log 0 times
[Main] Child 38 accessed file accesses.log 0 times
[Main] Child 39 accessed file accesses.log 0 times
[Main] Child 40 accessed file accesses.log 0 times
[Main] Child 41 accessed file accesses.log 0 times
[Main] Child 42 accessed file accesses.log 0 times
[Main] Child 43 accessed file accesses.log 0 times
[Main] Child 44 accessed file accesses.log 0 times
[Main] Child 45 accessed file accesses.log 0 times
[Main] Child 46 accessed file accesses.log 0 times
[Main] Child 47 accessed file accesses.log 0 times
[Main] Child 48 accessed file accesses.log 0 times
[Main] Child 49 accessed file accesses.log 0 times
[Main] Child 50 accessed file accesses.log 0 times
[Main] Child 51 accessed file accesses.log 0 times
[Main] Child 52 accessed file accesses.log 0 times
[Main] Child 53 accessed file accesses.log 0 times
[Main] Child 54 accessed file accesses.log 0 times
[Main] Child 55 accessed file accesses.log 0 times
[Main] Child 56 accessed file accesses.log 0 times
[Main] Child 57 accessed file accesses.log 0 times
[Main] Child 58 accessed file accesses.log 0 times
[Main] Child 59 accessed file accesses.log 0 times
[Main] Child 60 accessed file accesses.log 0 times
[Main] Child 61 accessed file accesses.log 0 times
[Main] Child 62 accessed file accesses.log 0 times
[Main] Child 63 accessed file accesses.log 0 times
[Main] Child 64 accessed file accesses.log 0 times
[Main] Child 65 accessed file accesses.log 0 times
[Main] Child 66 accessed file accesses.log 0 times
[Main] Child 67 accessed file accesses.log 0 times
[Main] Child 68 accessed file accesses.log 0 times
[Main] Child 69 accessed file accesses.log 0 times
[Main] Child 70 accessed file accesses.log 0 times
[Main] Child 71 accessed file accesses.log 0 times
[Main] Child 72 accessed file accesses.log 0 times
[Main] Child 73 accessed file accesses.log 0 times
[Main] Child 74 accessed file accesses.log 0 times
[Main] Child 75 accessed file accesses.log 0 times
[Main] Child 76 accessed file accesses.log 0 times
[Main] Child 77 accessed file accesses.log 0 times
[Main] Child 78 accessed file accesses.log 0 times
[Main] Child 79 accessed file accesses.log 0 times
[Main] Child 80 accessed file accesses.log 0 times
[Main] Child 81 accessed file accesses.log 0 times
[Main] Child 82 accessed file accesses.log 0 times
[Main] Child 83 accessed file accesses.log 0 times
[Main] Child 84 accessed file accesses.log 0 times
[Main] Child 85 accessed file accesses.log 0 times
[Main] Child 86 accessed file accesses.log 0 times
[Main] Child 87 accessed file accesses.log 0 times
[Main] Child 88 accessed file accesses.log 0 times
[Main] Child 89 accessed file accesses.log 0 times
[Main] Child 90 accessed file accesses.log 0 times
[Main] Child 91 accessed file accesses.log 0 times
[Main] Child 92 accessed file accesses.log 0 times
[Main] Child 93 accessed file accesses.log 0 times
[Main] Child 94 accessed file accesses.log 0 times
[Main] Child 95 accessed file accesses.log 0 times
[Main] Child 96 accessed file accesses.log 0 times
[Main] Child 97 accessed file accesses.log 0 times
[Main] Child 98 accessed file accesses.log 0 times
[Main] Child 99 accessed file accesses.log 0 times
[Main] ===> The process that accessed the file most often is 0 (0 accesses)
#include <errno.h>

#include <stdio.h>

#include <string.h>



// macros for handling errors

#define handle_error_en(en, msg)    do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)

#define handle_error(msg)           do { perror(msg); exit(EXIT_FAILURE); } while (0)