执行C程序时出现zsh illegal hardware instruction错误求助
问题:执行自定义程序时触发zsh illegal hardware instruction错误
问题描述
我正在完成一个C语言练习,需求是:程序通过命令行参数接收待执行的命令,逐行读取指定文件的内容,将命令中的@替换为当前行的内容,然后执行该命令。
但运行命令./file_exec esempio.txt cat @时,终端抛出zsh illegal hardware instruction错误。我尝试在main.c的第一个if语句后添加调试printf,但该语句并未执行。
预期输出应为:
Hello I'm italian
相关文件代码
main.c
#include "file_exec.h" int main(int argc, char **argv) { if(argc < 3) { fprintf(stderr, "Specificare il file di testo e il comando da eseguire.\n"); return 1; } char *filename = argv[1]; int cmdargc = argc - 2; char **opz = argv + 2; char *cmd = argv[2]; char *line = (char *)malloc(sizeof(char) * BUZZ_SIZE); int statusLine = 0; FILE *file = fopen(filename, "r"); if(file == NULL) { fprintf(stderr, "%s: Impossibile aprire %s: %s\n", argv[0], argv[1], strerror(errno)); return 2; } int size = 1024; do{ statusLine = fileReadLine(line, file, size); // leggo la singola linea if(statusLine == 2){ size += 1024; } if(strlen(line) != 0){ int ris = executeLine(cmdargc, cmd, opz); if(ris == -1){ fprintf(stderr, "Impossibile eseguire il comando: %s\n", cmd); return -1; } } }while(statusLine != -1); fclose(file); return 0; }
file_exec.c
#include "file_exec.h" int fileReadLine(char *line, FILE *file, int size){ if(!feof(file) && (int)strlen(line) < size){ fgets(line, size, file); }else if((int)strlen(line) == size){ line = realloc(line, size*2); return 2; }else{ free(line); return -1; } return 1; } int executeLine(int nOpz, char *cmd, char **opz){ char *pathCmd = strcat("/bin/",cmd); pid_t pidSon = fork(); opz = addArguments(nOpz, cmd, opz); switch(pidSon) { case -1: perror("fork() failed"); free(opz); return 1; case 0: printf("Esecuzione di ls...\n"); execl(pathCmd, cmd, opz, NULL); perror("exec failed"); free(opz); return 1; default: wait(NULL); printf("%s completed\n",cmd); } free(opz); return 0; } char **addArguments(int cmdargc, char *line, char **cmdargv){ char **newArgs = (char **)malloc((cmdargc + 1) * sizeof(char *)); for(int i = 0; i < cmdargc; i++){ if(strcmp(cmdargv[i], "@") == 0){ newArgs[i] = line; }else{ newArgs[i] = cmdargv[i]; } } newArgs[cmdargc] = NULL; return newArgs; }
file_exec.h
#ifndef FILEEX_H__ #define FILEEX_H__ #define BUZZ_SIZE 1024 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/wait.h> #include <string.h> #include <errno.h> int fileReadLine(char *, FILE *, int); int executeLine(int, char *, char **); char **addArguments(int, char *, char **); #endif
esempio.txt
file1.txt file2.txt file3.txt
file1.txt
Hello
file2.txt
I'm
file3.txt
italian
Makefile
file_exec: file_exec.o main.o gcc -Wall -Werror -Wextra -std=c99 file_exec.o main.o -o file_exec file_exec.o: file_exec.h file_exec.c gcc -Wall -Werror -Wextra -std=c99 -c file_exec.c main.o: file_exec.h main.c gcc -Wall -Werror -Wextra -std=c99 -c main.c clean: rm -f *.o main
环境信息
使用Intel架构的Mac设备。
内容的提问来源于stack exchange,提问作者Samuele
相关产品推荐
相关产品推荐

