Так что я должен сделать программу, что результаты выполнения аналогичны результатам после использования команды who и who am i in linux. проблема в том, что обе функции внутри if (strcmp ... и in else ... работают при разделении).Ошибка сегментации (ядро сбрасывается) C linux
Основная проблема заключается в том, что я должен иметь их как в одном файле, так и просто не работать. только для того, чтобы что-то сделать ./program am i и ./program сообщает о сбое сегментации (сбрасывается ядром).
Вторая проблема заключается в том, что я понятия не имею, как сделать часть ./program, я правильно работаю, она должна вернуться мне только мне: PTS пользователя/0 дата время ... не все пользователи, как в другой ... часть
#include <stdio.h>
#include <utmp.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <sys/types.h>
#define SHOWHOST
void show_info_who(struct utmp *utbufp)
{
if(utbufp->ut_type > 4){
time_t czas = utbufp->ut_time;
char buf[80];
struct tm* timeinfo = localtime(&czas);
printf("%-8.8s", utbufp->ut_name);
printf(" ");
printf("%-8.8s", utbufp->ut_line);
printf(" ");
strftime(buf, 80, "%F %R" , timeinfo);
printf("%s", buf);
printf(" ");
#ifdef SHOWHOST
printf("(%s)", utbufp->ut_host);
#endif
printf("\n");
}
}
int main(int argc, char *argv[])
{
struct utmp current_record;
int utmpfd;
int reclen = sizeof(current_record);
if ((utmpfd = open(UTMP_FILE, O_RDONLY)) == -1){
perror(UTMP_FILE);
exit(1);
}
if(strcmp (argv[1], "am") == 0){
if(strcmp (argv[2], "i") == 0){
while (read(utmpfd, ¤t_record, reclen) == reclen)
show_info_who(¤t_record);
printf("test\n");
}
close(utmpfd);
return 0;
}
while (read(utmpfd, ¤t_record, reclen) == reclen)
show_info_who(¤t_record);
close(utmpfd);
return 0;
}
Пробовал ли вы использовать отладчик, чтобы сузить область возникновения сегментации? –
* Где * произошел сбой? Запустите в отладчике, чтобы поймать сбой, когда поймаете, вы можете изучить и подобрать стек вызовов функций (дойти до * вашего * кода), а также изучить значения переменных. По крайней мере, пожалуйста, отредактируйте свой вопрос, чтобы показать, где в вашем коде произошел сбой, и значения задействованных переменных. –
Вы, кажется, пропустили проверку на 'argc' и, видимо, вы вызываете программу с слишком небольшим количеством аргументов. Необходима информация Мор. –