У меня есть программа, которая должна имитировать определенные команды оболочки.Одна из этих команд, которую я должен создать, это cat, но у меня проблема с ней.Когда я запускаю его для файла, который существует, он работает, но когда я пытаюсь запустить его для файла, который не существует, я получаю ошибку сегментации.Хотя я думал, что мне сказали, что fopen () можно использовать для проверки существования файла, не вызывая ошибки сегментации.Код для части кода в коде cat приведен ниже (есть некоторые переменные, которые были объявлены ранее, например, token, но я включил некоторые комментарии, чтобы объяснить, что это такое, однако я почти уверен, что проблема не имеет ничего общего сэти переменные.)
if(strncmp(token, "cat", 3) == 0){
FILE* in;
char tLine[500];
char f;
//Copy the entire line of user input from earlier into a temporary char array
strcpy(tLine, inputLine);
/*Advance the char array that contains the original line of input
split by spaces to the first argument*/
token = strtok(NULL, " ");
//For storing the number of arguments
int count = 0;
//Determine number of arguments
while(token != NULL){
count++;
token = strtok(NULL, " ");
}
strcpy(tLine, inputLine);
token = strtok(tLine, " ");
token = strtok(NULL, " ");
if(count < 1){
printf("%s", "Please enter at least one argument");
}
else if (count > 1){
printf("%s", "Please only enter one argument");
}
//If there is only one argument, attempt to open the file and read its contents.
else{
in = fopen(token, "r");
if(in){
f = fgetc(in);
while(f != EOF){
printf("%c", f);
f = fgetc(in);
}
}
else{
printf("%s", "Could not open file.");
}
fclose(in);
}
}