【问题标题】:Using fork() and execlp to count lines使用 fork() 和 execlp 计算行数
【发布时间】:2014-04-14 12:54:16
【问题描述】:

我正在尝试读取一个文件,计算该文件的行数,然后在最后呈现结果。我的一切都很好,唯一的问题是 execlp 命令,我不知道如何使用。

代码如下:

#include <stdio.h>
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <unistd.h> 
#include <stdlib.h> 
#define exit_on_error(s,m) if (s < 0) { perror(m); exit(1); } 

int main(int argc, char *argv[]){
    int i, status, total=0, F, n=0;

    for(i=1; i<argc; i++){
        if(fork()==0){
            F=open(argv[i], O_RDONLY);
            exit_on_error(F,"Erro na abertura do ficheiro");
            if(fork()==0)
            {
                wait();

                // ?????????????                                  

                execlp("wc", "wc", "-l", NULL);
            }
            close (F);
            return (0);
        }
        else{
            wait(&status);
            total += status >> 8;
        }
    }


    for(i=1; i<argc; i++){
        printf("PID=(%d), Ficheiro %s\n", getpid(), argv[i]);
    }
    for(i=1; i<argc; i++){
        printf("Numero de linhas do ficheiro %s: [%d]\n", argv[i], n);
    }
    printf("Ficheiros: [%d]---Erros: [%d]\n", --argc, total);

}

它显示如下内容: 程序名称是 2.c

./2 phonecontacts.txt ddd

Erro na abertura do ficheiro: 没有这样的文件或目录

PID=(3565), Ficheiro phonecontact.txt(包含 20 行的文件)

PID=(3565), Ficheiro ddd(这个不存在)

Numero de linhas do ficheiro phonecontact.txt: [0](这里应该显示 20 行)

Numero de linhas do ficheiro ddd: [0](这个不存在)

Ficheiros:[2]---错误[1]

wc:标准输入:输入/输出错误0

【问题讨论】:

    标签: c exec fork line line-count


    【解决方案1】:

    在稍微搞砸之后,我设法解决了我的问题:

    int main(int argc, char *argv[]){
            int i, status, total=0, F;
    
            for(i=1; i<argc; i++){
                    if(fork()==0){
                            close(0);
                            F=open(argv[i], O_RDONLY);
                            exit_on_error(F,"Erro na abertura do ficheiro");
                            if(fork())
                            {
                                    printf("Numero de linhas do ficheiro %s: \n", arg$
                                    execlp("wc", "wc", "-l", NULL);
                            }
                            close (F);
                            return (0);
                    }
                    else{
                            wait(&status);
                            total += status >> 8;
                    }
                    printf("PID=(%d), Ficheiro %s\n", getpid(), argv[i]);
            }
            printf("Ficheiros: [%d]---Erros: [%d]\n", --argc, total);
    }
    

    这是功能齐全的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 2012-12-26
      • 2013-07-28
      • 1970-01-01
      相关资源
      最近更新 更多