Linux进程 fork 实现1-100数字文件写读与格式输出

4星 · 超过85%的资源 需积分: 43 28 下载量 123 浏览量 更新于2024-11-29 收藏 991B TXT 举报
在Linux环境下,本篇代码示例展示了如何利用进程间的通信机制(如fork()函数)以及文件操作来实现从父进程向文件写入1到100的数字,并由子进程读取并按照每行10个数字的格式输出。以下是关键知识点的详细解释: 1. **`fork()` 函数**: fork()函数是Linux中的核心系统调用,用于在当前进程内创建一个新的子进程。当父进程调用fork()时,它会返回两个PID(进程ID),一个是子进程的ID,另一个是0。如果fork()返回0,表示该进程是子进程;返回非零值则表示是父进程。 2. **文件操作**: - **打开文件**: `open("/tmp/test", O_RDWR)`:父进程通过open()函数打开名为"/tmp/test"的文件,使用O_RDWR标志表示以读写模式打开。子进程后来也打开这个文件,使用了O_RDWR和O_CREAT标志,表明如果文件不存在则创建。 - **向文件写入数据**: 父进程使用write()函数将buf数组中的数据写入文件,`write(fd, buf, sizeof(buf))`。这里buf是一个字符数组,包含了1到100的整数。 - **子进程读取文件**: 子进程通过`read(fd, buf, sizeof(buf))`从文件中读取数据,然后逐个打印出来。 3. **进程控制和同步**: - **进程控制结构**:`if (p_id == 0)`判断条件确保了哪个进程执行哪部分代码。父进程执行完写入后关闭文件(`close(fd)`),而子进程在读取后也关闭文件。 - **进程同步**:通过检查`(i+1)%10==0`来判断是否到了新的一行,当满足条件时,子进程使用`\n`换行符进行格式化输出。 4. **错误处理**: - 如果fork()失败,父或子进程会捕获到错误并输出"Failed to fork a process!",然后调用exit()函数终止程序。 5. **权限设置**: `O_CREAT`和`S_IRUSR|S_IWUSR`标志用于在创建文件时指定权限。S_IRUSR表示文件只允许所有者读取,S_IWUSR表示所有者可以写入。这确保了只有父进程(所有者)能修改文件内容。 6. **内存管理**: 在这个例子中,父进程一次性将1到100的数字写入buf数组,然后通过fork()创建子进程。子进程再读取整个buf,这展示了进程间的数据传递方式,以及对内存的合理利用。 总结起来,这段代码演示了Linux下如何通过fork()创建父子进程,利用文件I/O进行数据交换,以及基本的进程同步与错误处理机制。同时,它还涉及文件权限和内存管理等知识点。