嵌入式linux c 编程题

101 阅读1分钟
  • 将文件逆序输出
#include <stdio.h>
#include <stdlib.h>


int main(int argc, char **argv)
{
  if (argc != 2)
  {
    fprintf(stderr, "Usage:\n\t%s <inputfile>\n", argv[0]);
    exit(-1);
  }

  FILE *srcfp = fopen(argv[1], "r");

  fseek(srcfp, 0, SEEK_END);

  int filesize = ftell(srcfp);

  char ch;

  for (int i = 0; i < filesize; i++)
  {
    fseek(srcfp, -1 - i, SEEK_END);

    ch = fgetc(srcfp);

    printf("%c", ch);
  }

  fclose(srcfp);

  return 0;
}

  • 每隔1秒打印带编号的时间信息,ctrl+c终止程序,再次运行,编号接着上次,编号要连续,程序现象如下:
link@ubuntu:~/code/linux/day02$ ./a.out
1:Fri Mar 29 05:33:48 2024
2:Fri Mar 29 05:33:49 2024
^C
link@ubuntu:~/code/linux/day02$ ./a.out
3:Fri Mar 29 05:33:51 2024
4:Fri Mar 29 05:33:52 2024
5:Fri Mar 29 05:33:53 2024
^C
link@ubuntu:~/code/linux/day02$ ./a.out

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>


int main(int argc, char **argv)
{

  time_t t;

  FILE *fp = fopen(".time.dat", "a+");

  if (fp == NULL)
  {
    perror("can't open file");
    exit(-1);
  }

  // 定位到最后一行
  int num = 0;
  int ret;
  int cnt = 0;
  int i;
  for (i = 0; ; i++)
  {

    ret = fseek(fp, -1 - i, SEEK_END);

    if (ret == -1)
      break;

    char ch = fgetc(fp);

    if (ch == '\n')
      cnt++;

    if (cnt == 2)
    {
      fscanf(fp, "%d", &num);
      break;
    }
  }


  fseek(fp, 0, SEEK_END);
  num++;

  while (1)
  {
    time(&t);

    char *timestr = ctime(&t);

    fprintf(fp, "%d:%s", num, timestr);

    fflush(fp);

    printf("%d:%s", num, timestr);

    num++;

    sleep(1);
  }

  fclose(fp);

  return 0;
}