From 5d6ed5e5437304eb81eb6a4c435322636f53ea96 Mon Sep 17 00:00:00 2001
From: Guo Wenxue <guowenxue@gmail.com>
Date: Sat, 10 Nov 2018 13:58:33 +0800
Subject: [PATCH] Update fork_var.c source 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