【问题标题】:Unix - processes using fork()Unix - 使用 fork() 的进程
【发布时间】:2013-04-10 18:33:29
【问题描述】:

我正在尝试解决一个问题,但我不知道我必须做什么。问题来了:

"创建一个父进程,从命令行接收 n 个文件名 arg1,arg2,...,argn。父进程创建 n-2 个子进程。每个子进程接收两个参数:i, argi。argi如果 i>2,文件将被修改:从 argi 文件中删除 i 位置倍数上的每个字节。"

这是我到目前为止所做的:

#include <stdio.h>
#include <unistd.h>

int main(int argc, char* argv[]){
printf("Creating a child\n");
int i;
for(i=0;i<argc-2;i++){
 if(fork()==0){
 printf("CHILD %d!\n",i+1);
 exit(0);
 }
}
wait(0);
}

你有什么建议吗?

【问题讨论】:

    标签: linux unix process fork


    【解决方案1】:

    最好将循环数从 2 到 argc-1(含)。由于您正在执行 argc-2 分叉,因此您也应该有 argc-2 等待,而不是单个等待。除此之外,您只是在读取文件并在删除指定位后将其写回。

    【讨论】:

    • 感谢您的建议!我真的不知道如何删除字节?我的意思是,我不太了解这部分“每个子进程都会收到两个参数:i, argi。”和一个字节。如果你能更明确一点!谢谢! :)
    • 这会稍微复杂一些。假设 i == 2。假设您的文件包含:Hello World。如果你删除所有索引为 2 的倍数的字节,你应该得到 HloWrd,这是我最喜欢的解释。但是,更简单的方法是删除字节 2,然后从前一个输出中删除字节 4,依此类推。这会给你:Hll Wrl。如果你想做第一个,你可以简单地通过读入文件,删除第 i 个字节(和倍数)并将它们复制回来。
    • 如果你有两个字符串str(从文件中读取)和str1,下面的循环应该做:k = 0; for ( j = 0; j
    • @unxut 谢谢!我会尽力! :)
    猜你喜欢
    • 1970-01-01
    • 2010-12-12
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2014-12-06
    • 1970-01-01
    相关资源
    最近更新 更多