From d81310d55b9b7d07904c19f879f50e52fd7be489 Mon Sep 17 00:00:00 2001 From: guowenxue <guowenxue@gmail.com> Date: Mon, 06 Nov 2023 16:52:08 +0800 Subject: [PATCH] Add new code --- ch3_fork/fork_var.c | 111 ++++++++++--------------------------------------------- 1 files changed, 21 insertions(+), 90 deletions(-) diff --git a/ch3_fork/fork_var.c b/ch3_fork/fork_var.c index 1489039..0fddba7 100644 --- a/ch3_fork/fork_var.c +++ b/ch3_fork/fork_var.c @@ -1,109 +1,40 @@ #include <stdio.h> +#include <errno.h> #include <unistd.h> #include <string.h> -#include <errno.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <ctype.h> -#define TMP_FILE "/tmp/.ifconfig.log" - -int main(int argc, char **argv) +int g_var = 6; +char g_buf[]="A string write to stdout.\n"; +int main (int argc, char **argv) { - pid_t pid; - int fd; - char buf[1024]; - int rv; - char *ptr; - FILE *fp; - char *ip_start; - char *ip_end; - char ipaddr[16]; + int var = 88; + pid_t pid; - if( (fd=open(TMP_FILE, O_RDWR|O_CREAT|O_TRUNC, 0644)) < 0 ) + if( write(STDOUT_FILENO, g_buf, sizeof(g_buf)-1) < 0) { - printf("Redirect standard output to file failure: %s\n", strerror(errno)); + printf("Write string to stdout error: %s\n", strerror(errno)); return -1; } - pid = fork(); - if(pid < 0) + printf("Befor fork\n"); + + if( (pid=fork()) < 0) { - printf("fork() create child process failure: %s\n", strerror(errno)); - return -1; + printf("fork() error: %s\n", strerror(errno)); + return -2; } - else if( pid == 0 ) + else if( 0 == pid) { - printf("Child process start excute ifconfig program\n"); - dup2(fd, STDOUT_FILENO); - execl("/sbin/ifconfig", "ifconfig", "eth0", NULL); - printf("Child process start excute ifconfig program over\n"); - return 0; + printf("Child process PID[%d] running...\n", getpid()); + g_var ++; + var ++; } - else + else { - sleep(3); + printf("Parent process PID[%d] waiting...\n", getpid()); + sleep(1); } - memset(buf, 0, sizeof(buf)); - - rv=read(fd, buf, sizeof(buf)); - printf("Read %d bytes data dierectly read after child process write\n", rv); - - lseek(fd, 0, SEEK_SET); - rv=read(fd, buf, sizeof(buf)); - printf("Read %d bytes data after lseek:\n %s\n ", rv, buf); - - fp = fdopen(fd, "r"); - fseek(fp, 0, SEEK_SET); - - memset(buf, 0, sizeof(buf)); - - rv=read(fd, buf, sizeof(buf)); - printf("Read %d bytes data dierectly read after child process write\n", rv); - printf("Read %d bytes data dierectly read after child process write\n", rv); - - lseek(fd, 0, SEEK_SET); - rv=read(fd, buf, sizeof(buf)); - printf("Read %d bytes data after lseek:\n %s\n ", rv, buf); - - fp = fdopen(fd, "r"); - fseek(fp, 0, SEEK_SET); - - while( fgets(buf, sizeof(buf), fp) ) - { - if( strstr(buf, "netmask") ) - { - ptr=strstr(buf, "inet"); - if( !ptr ) - { - break; - } - ptr += strlen("inet"); - - while( isblank(*ptr) ) - ptr++; - - ip_start = ptr; - - while( !isblank(*ptr) ) - ptr++; - - ip_end = ptr; - - memset(ipaddr, 0, sizeof(ipaddr)); - memcpy(ipaddr, ip_start, ip_end-ip_start); - - break; - } - } - - printf("Parser and get IP address: %s\n", ipaddr); - - fclose(fp); - - unlink(TMP_FILE); - + printf("PID=%ld, g_var=%d, var=%d\n", (long) getpid(), g_var, var); return 0; } -- Gitblit v1.9.1