=Start=
缘由:
整理学习在进行Linux下C编程中碰到的一些知识点,方便以后进行参考。
正文:
参考解答:
| #include <stdio.h>#include <stdlib.h>#include <string.h>intmain(intargc, char*argv[]){   FILE *stream;   char*line = NULL;   size_t len = 0;   ssize_t nread;   if(argc != 2) {       fprintf(stderr, "Usage: %s <file>\n", argv[1]);       exit(EXIT_FAILURE);   }   stream = fopen(argv[1], "r");   if(stream == NULL) {       perror("fopen");       exit(EXIT_FAILURE);   }   while((nread = getline(&line, &len, stream)) != -1) {       printf("Retrieved line of length %zu:\n", nread);       // fwrite(line, nread, 1, stdout);       printf("strlen(line) = %d\n", strlen(line));       printf("sizeof(line) = %d\n", sizeof(line));       printf("%s\n", line);   }   printf("strlen(line) = %d\n", strlen(line));   printf("sizeof(line) = %d\n", sizeof(line));   printf("%s\n", line);   free(line);   fclose(stream);   exit(EXIT_SUCCESS);} | 
&
| #include <stdio.h>#include <stdlib.h>intmain(intargc, char**argv){    FILE *cmdline = fopen("/proc/self/cmdline", "rb");    char*arg = 0;    size_t size = 0;    while(getdelim(&arg, &size, 0, cmdline) != -1)    {        puts(arg);    }    free(arg);    fclose(cmdline);    return0;} | 
&
| voidread_proc(intprocess_pid) {    charcmdline[1024], fname1[1024], ids[1024], fname2[1024], buf[1024];    intr = 0, fd, i;    FILE *f = NULL;    snprintf(fname1, sizeof(fname1), "/proc/%d/status", process_pid);    f = fopen(fname1, "r");    memset(&ids, 0, sizeof(ids));    while(f && fgets(buf, sizeof(buf), f) != NULL) {        if(strstr(buf, "Uid")) {            strtok(buf, "\n");            snprintf(ids, sizeof(ids), "%s", buf);        }    }    if(f)        fclose(f);    snprintf(fname2, sizeof(fname2), "/proc/%d/cmdline", process_pid);    fd = open(fname2, O_RDONLY);    memset(&cmdline, 0, sizeof(cmdline));    if(fd > 0) {        r = read(fd, cmdline, sizeof(cmdline));        close(fd);        for(i = 0; r > 0&& i < r-1; ++i) {            if(cmdline[i] == 0)                cmdline[i] = ' ';        }    }    printf("EXEC:pid=%d\t[%s]\t[%s]\n", process_pid, ids, cmdline);} | 
参考链接:
- http://man7.org/linux/man-pages/man3/getline.3.html
- http://man7.org/linux/man-pages/man5/proc.5.html
- https://stackoverflow.com/questions/15545341/process-name-from-its-pid-in-linux/22214304#22214304
- http://users.suse.com/~krahmer/exec-notify.c
=END=