gpt4 book ai didi

c - 使用 fork() 和 execlp 计算行数

转载 作者:行者123 更新时间:2023-11-30 17:35:10 24 4
gpt4 key购买 nike

我正在尝试读取一个文件,计算该文件的行数,然后在最后呈现结果。我一切顺利,唯一的问题是 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

./2phonecontacts.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

最佳答案

经过一番修改后,我成功解决了我的问题:

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);
}

这是功能齐全的代码。

关于c - 使用 fork() 和 execlp 计算行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23060654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com