欢迎光临
我们一直在努力

基础开发工具(中)

文章目录

    • 4. 自动化构建-make/Makefile
    • 5. Linux第一个系统程序−进度条

4. 自动化构建-make/Makefile

自动化构建-make/Makefile

[gsm@VM43centos lesson7]$ touch proc.c
[gsm@VM43centos lesson7]$ ll
total 0
rwrwr 1 gsm gsm 0 Oct 12 15:53 proc.c
[gsm@VM43centos lesson7]$ vim proc.c
[gsm@VM43centos lesson7]$ ll
total 4
rwrwr 1 gsm gsm 79 Oct 12 15:54 proc.c
[gsm@VM43centos lesson7]$ gcc o proc proc.c
[gsm@VM43centos lesson7]$ ll
total 16
rwxrwxrx 1 gsm gsm 8360 Oct 12 15:55 proc
rwrwr 1 gsm gsm 79 Oct 12 15:54 proc.c
[gsm@VM43centos lesson7]$ ./proc
hello Linux!
[gsm@VM43centos lesson7]$ rm proc
[gsm@VM43centos lesson7]$ ll
total 4
rwrwr 1 gsm gsm 79 Oct 12 15:54 proc.c
[gsm@VM43centos lesson7]$ touch Makefile
[gsm@VM43centos lesson7]$ ll
total 4
rwrwr 1 gsm gsm 0 Oct 12 15:56 Makefile
rwrwr 1 gsm gsm 79 Oct 12 15:54 proc.c
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ cat Makefile
proc:proc.c
gcc o proc proc.c
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 32 Oct 12 15:58 Makefile
rwrwr 1 gsm gsm 79 Oct 12 15:54 proc.c
[gsm@VM43centos lesson7]$ make
gcc o proc proc.c
[gsm@VM43centos lesson7]$ ll
total 20
rwrwr 1 gsm gsm 32 Oct 12 15:58 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 15:59 proc
rwrwr 1 gsm gsm 79 Oct 12 15:54 proc.c
[gsm@VM43centos lesson7]$ ./proc
hello Linux!
[gsm@VM43centos lesson7]$ rm proc
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 32 Oct 12 15:58 Makefile
rwrwr 1 gsm gsm 79 Oct 12 15:54 proc.c
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 64 Oct 12 16:14 Makefile
rwrwr 1 gsm gsm 79 Oct 12 15:54 proc.c
[gsm@VM43centos lesson7]$ cat Makefile
proc:proc.c
gcc o proc proc.c
.PHONY:clean
clean:
rm f proc
[gsm@VM43centos lesson7]$ make
gcc o proc proc.c
[gsm@VM43centos lesson7]$ ./proc
hello Linux!
[gsm@VM43centos lesson7]$ ll
total 20
rwrwr 1 gsm gsm 64 Oct 12 16:14 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 16:15 proc
rwrwr 1 gsm gsm 79 Oct 12 15:54 proc.c
[gsm@VM43centos lesson7]$ make clean
rm f proc
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 64 Oct 12 16:14 Makefile
rwrwr 1 gsm gsm 79 Oct 12 15:54 proc.c
[gsm@VM43centos lesson7]$ make proc
gcc o proc proc.c
[gsm@VM43centos lesson7]$ ll
total 20
rwrwr 1 gsm gsm 64 Oct 12 16:14 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 16:22 proc
rwrwr 1 gsm gsm 79 Oct 12 15:54 proc.c
[gsm@VM43centos lesson7]$ make clean
rm f proc
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 64 Oct 12 16:14 Makefile
rwrwr 1 gsm gsm 79 Oct 12 15:54 proc.c
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ cat Makefile
.PHONY:clean
clean:
rm f proc
proc:proc.c
gcc o proc proc.c
[gsm@VM43centos lesson7]$ make
rm f proc
[gsm@VM43centos lesson7]$ make proc
gcc o proc proc.c
[gsm@VM43centos lesson7]$ ll
total 20
rwrwr 1 gsm gsm 64 Oct 12 16:24 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 16:24 proc
rwrwr 1 gsm gsm 79 Oct 12 15:54 proc.c
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ ll
total 20
rwrwr 1 gsm gsm 94 Oct 12 16:27 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 16:24 proc
rwrwr 1 gsm gsm 79 Oct 12 15:54 proc.c
[gsm@VM43centos lesson7]$ rm proc
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 94 Oct 12 16:27 Makefile
rwrwr 1 gsm gsm 79 Oct 12 15:54 proc.c
[gsm@VM43centos lesson7]$ cat Makefile
proc:proc.c
echo "hahaha"
#gcc o proc proc.c
.PHONY:clean
clean:
echo "hehe"
#rm f proc
[gsm@VM43centos lesson7]$ make
echo "hahaha"
hahaha
#gcc o proc proc.c
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ cat Makefile
proc:proc.c
echo "hahaha"
.PHONY:clean
clean:
echo "hehe"
#rm f proc
[gsm@VM43centos lesson7]$ make
echo "hahaha"
hahaha
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 73 Oct 12 16:29 Makefile
rwrwr 1 gsm gsm 79 Oct 12 15:54 proc.c
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ make
echo "hahaha"
hahaha
echo "hahaha"
hahaha
echo "hahaha"
hahaha
echo "hahaha"
hahaha
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ cat Makefile
proc:proc.c
@echo "hahaha"
@echo "hahaha"
@echo "hahaha"
@echo "hahaha"
.PHONY:clean
clean:
echo "hehe"
#rm f proc
[gsm@VM43centos lesson7]$ make
hahaha
hahaha
hahaha
hahaha
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ cat Makefile
proc:proc.c
@echo "开始编译…"
@gcc o proc proc.c
@echo "结束编译…"
.PHONY:clean
clean:
@echo "清理完成…"
@rm f proc
[gsm@VM43centos lesson7]$ make
开始编译...
结束编译...
[gsm@VM43centos lesson7]$ vim proc.c
[gsm@VM43centos lesson7]$ cat proc.c
#include <stdio.h>

int main()
{
printf("hello Linux!\\n")
return 0;
}
[gsm@VM43centos lesson7]$ make clean
清理完成...
[gsm@VM43centos lesson7]$ make
开始编译...
proc.c: In function ‘main’:
proc.c:6:5: error: expected ‘;’ before ‘return
return 0;
^
make: *** [proc] Error 1
[gsm@VM43centos lesson7]$ vim proc.c
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 141 Oct 12 16:35 Makefile
rwrwr 1 gsm gsm 79 Oct 12 16:39 proc.c
[gsm@VM43centos lesson7]$ make
开始编译...
结束编译...
[gsm@VM43centos lesson7]$ ll
total 20
rwrwr 1 gsm gsm 141 Oct 12 16:35 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 16:39 proc
rwrwr 1 gsm gsm 79 Oct 12 16:39 proc.c
[gsm@VM43centos lesson7]$ ./proc
hello Linux!
[gsm@VM43centos lesson7]$ make clean
清理完成...
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 141 Oct 12 16:35 Makefile
rwrwr 1 gsm gsm 79 Oct 12 16:39 proc.c
[gsm@VM43centos lesson7]$ cp Makefile backup1012
[gsm@VM43centos lesson7]$ ll
total 12
rwrwr 1 gsm gsm 141 Oct 12 16:41 backup1012
rwrwr 1 gsm gsm 141 Oct 12 16:35 Makefile
rwrwr 1 gsm gsm 79 Oct 12 16:39 proc.c
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ cat Makefile
proc:proc.c
gcc o proc proc.c
.PHONY:clean
clean:
rm f proc
[gsm@VM43centos lesson7]$ make
gcc o proc proc.c
[gsm@VM43centos lesson7]$ ll
total 24
rwrwr 1 gsm gsm 141 Oct 12 16:41 backup1012
rwrwr 1 gsm gsm 64 Oct 12 16:42 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 16:42 proc
rwrwr 1 gsm gsm 79 Oct 12 16:39 proc.c
[gsm@VM43centos lesson7]$ ./proc
hello Linux!
[gsm@VM43centos lesson7]$ mv backup1012 ..
[gsm@VM43centos lesson7]$ ll
total 20
rwrwr 1 gsm gsm 64 Oct 12 16:42 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 16:42 proc
rwrwr 1 gsm gsm 79 Oct 12 16:39 proc.c
[gsm@VM43centos lesson7]$ make clean
rm f proc
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 64 Oct 12 16:42 Makefile
rwrwr 1 gsm gsm 79 Oct 12 16:39 proc.c
[gsm@VM43centos lesson7]$ make
gcc o proc proc.c
[gsm@VM43centos lesson7]$ ./proc
hello Linux!
[gsm@VM43centos lesson7]$ ll
total 20
rwrwr 1 gsm gsm 64 Oct 12 16:48 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 16:49 proc
rwrwr 1 gsm gsm 79 Oct 12 16:39 proc.c
[gsm@VM43centos lesson7]$ make
make: `proc' is up to date.
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ cat Makefile
proc:proc.c
gcc o proc proc.c

#.PHONY:clean
clean:
rm f proc
[gsm@VM43centos lesson7]$ make clean
rm f proc
[gsm@VM43centos lesson7]$ make
gcc o proc proc.c
[gsm@VM43centos lesson7]$ make
make: `proc' is up to date.
[gsm@VM43centos lesson7]$ make
make: `proc' is up to date.
[gsm@VM43centos lesson7]$ make clean
rm f proc
[gsm@VM43centos lesson7]$ make clean
rm f proc
[gsm@VM43centos lesson7]$ make clean
rm f proc
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ cat Makefile
.PHONY:proc
proc:proc.c
gcc o proc proc.c

#.PHONY:clean
clean:
rm f proc
[gsm@VM43centos lesson7]$ make clean
rm f proc
[gsm@VM43centos lesson7]$ make
gcc o proc proc.c
[gsm@VM43centos lesson7]$ ./proc
hello Linux!
[gsm@VM43centos lesson7]$ make
gcc o proc proc.c
[gsm@VM43centos lesson7]$ make
gcc o proc proc.c
[gsm@VM43centos lesson7]$ make
gcc o proc proc.c
[gsm@VM43centos lesson7]$ ll
total 20
rwrwr 1 gsm gsm 78 Oct 12 17:00 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 17:01 proc
rwrwr 1 gsm gsm 79 Oct 12 16:39 proc.c
[gsm@VM43centos lesson7]$ make clean
rm f proc
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 78 Oct 12 17:00 Makefile
rwrwr 1 gsm gsm 79 Oct 12 16:39 proc.c
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ cat Makefile
#.PHONY:proc
proc:proc.c
gcc o proc proc.c

#.PHONY:clean
clean:
rm f proc
[gsm@VM43centos lesson7]$ make
gcc o proc proc.c
[gsm@VM43centos lesson7]$ ll
total 20
rwrwr 1 gsm gsm 79 Oct 12 17:06 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 17:06 proc
rwrwr 1 gsm gsm 79 Oct 12 16:39 proc.c
[gsm@VM43centos lesson7]$ ./proc
hello Linux!
[gsm@VM43centos lesson7]$ make
make: `proc' is up to date.
[gsm@VM43centos lesson7]$ make
make: `proc' is up to date.
[gsm@VM43centos lesson7]$ vim proc.c
[gsm@VM43centos lesson7]$ cat proc.c
#include <stdio.h>

int main()
{
printf("hello Linux!\\n");
printf("hello Linux!\\n");
printf("hello Linux!\\n");
printf("hello Linux!\\n");
return 0;
}
[gsm@VM43centos lesson7]$ make
gcc o proc proc.c
[gsm@VM43centos lesson7]$ make
make: `proc' is up to date.
[gsm@VM43centos lesson7]$ ll
total 20
rwrwr 1 gsm gsm 79 Oct 12 17:06 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 17:07 proc
rwrwr 1 gsm gsm 169 Oct 12 17:07 proc.c
[gsm@VM43centos lesson7]$ stat proc.c
File: ‘proc.c’
Size: 169 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769dInode: 1052393 Links: 1
Access: (0664/rwrwr) Uid: ( 1001/ gsm) Gid: ( 1001/ gsm)
Access: 20251012 17:07:11.741037892 +0800
Modify: 20251012 17:07:11.739037901 +0800
Change: 20251012 17:07:11.739037901 +0800
Birth:
[gsm@VM43centos lesson7]$ ll
total 20
rwrwr 1 gsm gsm 79 Oct 12 17:06 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 17:07 proc
rwrwr 1 gsm gsm 169 Oct 12 17:07 proc.c
[gsm@VM43centos lesson7]$ chmod or proc.c
[gsm@VM43centos lesson7]$ ll
total 20
rwrwr 1 gsm gsm 79 Oct 12 17:06 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 17:07 proc
rwrw 1 gsm gsm 169 Oct 12 17:07 proc.c
[gsm@VM43centos lesson7]$ stat proc.c
File: ‘proc.c’
Size: 169 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769dInode: 1052393 Links: 1
Access: (0660/rwrw) Uid: ( 1001/ gsm) Gid: ( 1001/ gsm)
Access: 20251012 17:07:11.741037892 +0800
Modify: 20251012 17:07:11.739037901 +0800
Change: 20251012 17:14:13.525097070 +0800
Birth:
[gsm@VM43centos lesson7]$ vim proc.c
[gsm@VM43centos lesson7]$ cat proc.c
#include <stdio.h>

int main()
{
printf("hello Linux!\\n");
printf("hello Linux!\\n");
printf("hello Linux!\\n");
printf("hello Linux!\\n");
printf("hello Linux!\\n");
printf("hello Linux!\\n");
printf("hello Linux!\\n");
return 0;
}
[gsm@VM43centos lesson7]$ stat proc.c
File: ‘proc.c’
Size: 259 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769dInode: 1052393 Links: 1
Access: (0660/rwrw) Uid: ( 1001/ gsm) Gid: ( 1001/ gsm)
Access: 20251012 17:15:26.229763190 +0800
Modify: 20251012 17:15:26.226763204 +0800
Change: 20251012 17:15:26.226763204 +0800
Birth:
[gsm@VM43centos lesson7]$ ll
total 20
rwrwr 1 gsm gsm 79 Oct 12 17:06 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 17:07 proc
rwrw 1 gsm gsm 259 Oct 12 17:15 proc.c
[gsm@VM43centos lesson7]$ make
gcc o proc proc.c
[gsm@VM43centos lesson7]$ make
make: `proc' is up to date.
[gsm@VM43centos lesson7]$ make
make: `proc' is up to date.
[gsm@VM43centos lesson7]$ stat proc.c
File: ‘proc.c’
Size: 259 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769dInode: 1052393 Links: 1
Access: (0660/rwrw) Uid: ( 1001/ gsm) Gid: ( 1001/ gsm)
Access: 20251012 17:15:26.229763190 +0800
Modify: 20251012 17:15:26.226763204 +0800
Change: 20251012 17:15:26.226763204 +0800
Birth:
[gsm@VM43centos lesson7]$ stat proc
File: ‘proc’
Size: 8360 Blocks: 24 IO Block: 4096 regular file
Device: fd01h/64769dInode: 1052395 Links: 1
Access: (0775/rwxrwxrx) Uid: ( 1001/ gsm) Gid: ( 1001/ gsm)
Access: 20251012 17:23:44.872478158 +0800
Modify: 20251012 17:23:44.147481475 +0800
Change: 20251012 17:23:44.147481475 +0800
Birth:
[gsm@VM43centos lesson7]$ make
make: `proc' is up to date.
[gsm@VM43centos lesson7]$ touch m proc.c
[gsm@VM43centos lesson7]$ stat proc.c
File: ‘proc.c’
Size: 259 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769dInode: 1052393 Links: 1
Access: (0660/rwrw) Uid: ( 1001/ gsm) Gid: ( 1001/ gsm)
Access: 20251012 17:25:46.871920321 +0800
Modify: 20251012 17:25:45.957924498 +0800
Change: 20251012 17:25:45.957924498 +0800
Birth:
[gsm@VM43centos lesson7]$ make
gcc o proc proc.c
[gsm@VM43centos lesson7]$ stat proc
File: ‘proc’
Size: 8360 Blocks: 24 IO Block: 4096 regular file
Device: fd01h/64769dInode: 1052395 Links: 1
Access: (0775/rwxrwxrx) Uid: ( 1001/ gsm) Gid: ( 1001/ gsm)
Access: 20251012 17:26:32.865710134 +0800
Modify: 20251012 17:26:32.422712158 +0800
Change: 20251012 17:26:32.422712158 +0800
Birth:
[gsm@VM43centos lesson7]$ make
make: `proc' is up to date.
[gsm@VM43centos lesson7]$ touch proc.c
[gsm@VM43centos lesson7]$ stat proc.c
File: ‘proc.c’
Size: 259 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769dInode: 1052393 Links: 1
Access: (0660/rwrw) Uid: ( 1001/ gsm) Gid: ( 1001/ gsm)
Access: 20251012 17:27:22.865481713 +0800
Modify: 20251012 17:27:21.185489386 +0800
Change: 20251012 17:27:21.185489386 +0800
Birth:
[gsm@VM43centos lesson7]$ make
gcc o proc proc.c
[gsm@VM43centos lesson7]$ ll
total 20
rwrwr 1 gsm gsm 79 Oct 12 17:06 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 17:27 proc
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ cat Makefile
.PHONY:proc
proc:proc.c
gcc o proc proc.c

#.PHONY:clean
clean:
rm f proc
[gsm@VM43centos lesson7]$ make
gcc o proc proc.c
[gsm@VM43centos lesson7]$ make
gcc o proc proc.c
[gsm@VM43centos lesson7]$ make
gcc o proc proc.c
[gsm@VM43centos lesson7]$ make clean
rm f proc
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 78 Oct 12 17:30 Makefile
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ cat Makefile
proc:proc.c
gcc o proc proc.c

.PHONY:clean
clean:
rm f proc
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 65 Oct 12 17:56 Makefile
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
[gsm@VM43centos lesson7]$ cp Makefile backup20251012_2
[gsm@VM43centos lesson7]$ ll
total 12
rwrwr 1 gsm gsm 65 Oct 12 17:57 backup20251012_2
rwrwr 1 gsm gsm 65 Oct 12 17:56 Makefile
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
[gsm@VM43centos lesson7]$ mv backup20251012_2 ..
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 65 Oct 12 17:56 Makefile
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ cat Makefile
proc:proc.o
gcc proc.o o proc
proc.o:proc.s
gcc c proc.s o proc.o
proc.s:proc.i
gcc S proc.i o proc.s
proc.i:proc.c
gcc E proc.c o proc.i

.PHONY:clean
clean:
rm f proc
[gsm@VM43centos lesson7]$ make
gcc E proc.c o proc.i
gcc S proc.i o proc.s
gcc c proc.s o proc.o
gcc proc.o o proc
[gsm@VM43centos lesson7]$ ll
total 48
rwrwr 1 gsm gsm 183 Oct 12 18:05 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 18:05 proc
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
rwrwr 1 gsm gsm 17057 Oct 12 18:05 proc.i
rwrwr 1 gsm gsm 1848 Oct 12 18:05 proc.o
rwrwr 1 gsm gsm 622 Oct 12 18:05 proc.s
[gsm@VM43centos lesson7]$ ./proc
hello Linux!
hello Linux!
hello Linux!
hello Linux!
hello Linux!
hello Linux!
hello Linux!
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ cat Makefile
proc:proc.o
gcc proc.o o proc
proc.o:proc.s
gcc c proc.s o proc.o
proc.s:proc.i
gcc S proc.i o proc.s
proc.i:proc.c
gcc E proc.c o proc.i

.PHONY:clean
clean:
rm f proc.i proc.s proc.o proc
[gsm@VM43centos lesson7]$ make clean
rm f proc.i proc.s proc.o proc
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 204 Oct 12 18:07 Makefile
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ cat Makefile
proc:proc.o
gcc proc.o o proc
proc.o:proc.c
gcc c proc.c

.PHONY:clean
clean:
rm f proc.o proc
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 102 Oct 12 18:17 Makefile
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
[gsm@VM43centos lesson7]$ make
gcc c proc.c
gcc proc.o o proc
[gsm@VM43centos lesson7]$ ll
total 24
rwrwr 1 gsm gsm 102 Oct 12 18:17 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 18:17 proc
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
rwrwr 1 gsm gsm 1848 Oct 12 18:17 proc.o
[gsm@VM43centos lesson7]$ make clean
rm f proc.o proc
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 102 Oct 12 18:17 Makefile
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ cat Makefile
proc:proc.o
gcc proc.o o proc
%.o:%.c
gcc c $<

.PHONY:clean
clean:
rm f proc.o proc
[gsm@VM43centos lesson7]$ make
gcc c proc.c
gcc proc.o o proc
[gsm@VM43centos lesson7]$ ll
total 24
rwrwr 1 gsm gsm 92 Oct 12 18:20 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 18:22 proc
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
rwrwr 1 gsm gsm 1848 Oct 12 18:22 proc.o
[gsm@VM43centos lesson7]$ make clean
rm f proc.o proc
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 92 Oct 12 18:20 Makefile
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ cat Makefile
bin=proc
src=proc.o

$(bin):$(src)
gcc $^ o $@
%.o:%.c
gcc c $<

.PHONY:clean
clean:
rm f proc.o $(bin)
[gsm@VM43centos lesson7]$ make
gcc c proc.c
gcc proc.o o proc
[gsm@VM43centos lesson7]$ ll
total 24
rwrwr 1 gsm gsm 111 Oct 12 19:47 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 19:47 proc
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
rwrwr 1 gsm gsm 1848 Oct 12 19:47 proc.o
[gsm@VM43centos lesson7]$ ./proc
hello Linux!
hello Linux!
hello Linux!
hello Linux!
hello Linux!
hello Linux!
hello Linux!
[gsm@VM43centos lesson7]$ make clean
rm f proc.o proc
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 111 Oct 12 19:47 Makefile
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
[gsm@VM43centos lesson7]$ cat Makefile
bin=hello
src=proc.o

$(bin):$(src)
gcc $^ o $@
%.o:%.c
gcc c $<

.PHONY:clean
clean:
rm f proc.o $(bin)
[gsm@VM43centos lesson7]$ make
gcc c proc.c
gcc proc.o o hello
[gsm@VM43centos lesson7]$ ll
total 24
rwxrwxrx 1 gsm gsm 8360 Oct 12 19:48 hello
rwrwr 1 gsm gsm 112 Oct 12 19:48 Makefile
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
rwrwr 1 gsm gsm 1848 Oct 12 19:48 proc.o
[gsm@VM43centos lesson7]$ ./hello
hello Linux!
hello Linux!
hello Linux!
hello Linux!
hello Linux!
hello Linux!
hello Linux!
[gsm@VM43centos lesson7]$ make clean
rm f proc.o hello
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 112 Oct 12 19:48 Makefile
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
[gsm@VM43centos lesson7]$ cp Makefile backup20251012_2
[gsm@VM43centos lesson7]$ ll
total 12
rwrwr 1 gsm gsm 112 Oct 12 19:50 backup20251012_2
rwrwr 1 gsm gsm 112 Oct 12 19:48 Makefile
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
[gsm@VM43centos lesson7]$ mv backup20251012_2 ..
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 112 Oct 12 19:48 Makefile
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ cat Makefile
bin=proc
src=proc.c

$(bin):$(src)
gcc $^ o $@

.PHONY:clean
clean:
rm f $(bin)
[gsm@VM43centos lesson7]$ make
gcc proc.c o proc
[gsm@VM43centos lesson7]$ ll
total 20
rwrwr 1 gsm gsm 84 Oct 12 20:06 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 20:07 proc
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
[gsm@VM43centos lesson7]$ make clean
rm f proc
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 84 Oct 12 20:06 Makefile
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
[gsm@VM43centos lesson7]$ touch code.c
[gsm@VM43centos lesson7]$ ll
total 8
rwrwr 1 gsm gsm 0 Oct 12 20:13 code.c
rwrwr 1 gsm gsm 84 Oct 12 20:06 Makefile
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
[gsm@VM43centos lesson7]$ cat proc.c > code.c
[gsm@VM43centos lesson7]$ vim code.c
[gsm@VM43centos lesson7]$ cat proc.c
#include <stdio.h>

int main()
{
printf("hello Linux!\\n");
printf("hello Linux!\\n");
printf("hello Linux!\\n");
printf("hello Linux!\\n");
printf("hello Linux!\\n");
printf("hello Linux!\\n");
printf("hello Linux!\\n");
return 0;
}
[gsm@VM43centos lesson7]$ cat code.c
#include <stdio.h>

int main()
{
printf("hello code!\\n");
printf("hello code!\\n");
printf("hello code!\\n");
printf("hello code!\\n");
printf("hello code!\\n");
printf("hello code!\\n");
return 0;
}
[gsm@VM43centos lesson7]$ ll
total 12
rwrwr 1 gsm gsm 223 Oct 12 20:15 code.c
rwrwr 1 gsm gsm 84 Oct 12 20:06 Makefile
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ cat Makefile
bin1=proc
src1=proc.c

bin2=code
src2=code.c

.PHONY:all
all:$(bin1) $(bin2)

$(bin1):$(src1)
gcc $^ o $@

$(bin2):$(src2)
gcc $^ o $@

.PHONY:clean
clean:
rm f $(bin1) $(bin2)
[gsm@VM43centos lesson7]$ make
gcc proc.c o proc
gcc code.c o code
[gsm@VM43centos lesson7]$ ll
total 36
rwxrwxrx 1 gsm gsm 8360 Oct 12 20:28 code
rwrwr 1 gsm gsm 223 Oct 12 20:15 code.c
rwrwr 1 gsm gsm 184 Oct 12 20:28 Makefile
rwxrwxrx 1 gsm gsm 8360 Oct 12 20:28 proc
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
[gsm@VM43centos lesson7]$ ./proc
hello Linux!
hello Linux!
hello Linux!
hello Linux!
hello Linux!
hello Linux!
hello Linux!
[gsm@VM43centos lesson7]$ ./code
hello code!
hello code!
hello code!
hello code!
hello code!
hello code!
[gsm@VM43centos lesson7]$ make clean
rm f proc code
[gsm@VM43centos lesson7]$ ll
total 12
rwrwr 1 gsm gsm 223 Oct 12 20:15 code.c
rwrwr 1 gsm gsm 184 Oct 12 20:28 Makefile
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c

5. Linux第一个系统程序−进度条

Linux第一个系统程序−进度条

[gsm@VM43centos lesson7]$ ll
total 12
rwrwr 1 gsm gsm 223 Oct 12 20:15 code.c
rwrwr 1 gsm gsm 184 Oct 12 20:28 Makefile
rwrw 1 gsm gsm 259 Oct 12 17:27 proc.c
[gsm@VM43centos lesson7]$ vim proc.c
[gsm@VM43centos lesson7]$ cat proc.c
#include <stdio.h>
#include <unistd.h>

int main()
{
printf("hello Linux!\\n");

sleep(2);
return 0;
}
[gsm@VM43centos lesson7]$ man 3 sleep
[gsm@VM43centos lesson7]$ vim Makefile
[gsm@VM43centos lesson7]$ cat Makefile
bin1=proc
src1=proc.c

#bin2=code
#src2=code.c

#.PHONY:all
#all:$(bin1) $(bin2)

$(bin1):$(src1)
gcc $^ o $@

#$(bin2):$(src2)
#gcc $^ o $@

.PHONY:clean
clean:
rm f $(bin1)
#rm f $(bin1) $(bin2)
[gsm@VM43centos lesson7]$ make
gcc proc.c o proc
[gsm@VM43centos lesson7]$ ./proc
hello Linux!
[gsm@VM43centos lesson7]$ vim proc.c
[gsm@VM43centos lesson7]$ cat proc.c
#include <stdio.h>
#include <unistd.h>

int main()
{
printf("hello Linux!");

sleep(2);
return 0;
}
[gsm@VM43centos lesson7]$ make
gcc proc.c o proc
[gsm@VM43centos lesson7]$ ./proc
hello Linux![gsm@VM43centos lesson7]$ man fflush
[gsm@VM43centos lesson7]$ man stdin
[gsm@VM43centos lesson7]$ ll
total 24
rwrwr 1 gsm gsm 223 Oct 12 20:15 code.c
rwrwr 1 gsm gsm 206 Oct 12 21:01 Makefile
rwxrwxrx 1 gsm gsm 8408 Oct 12 21:03 proc
rwrw 1 gsm gsm 112 Oct 12 21:03 proc.c
[gsm@VM43centos lesson7]$ vim proc.c
[gsm@VM43centos lesson7]$ cat proc.c
#include <stdio.h>
#include <unistd.h>

int main()
{
printf("hello Linux!");
fflush(stdout);
sleep(2);
return 0;
}
[gsm@VM43centos lesson7]$ make
gcc proc.c o proc
[gsm@VM43centos lesson7]$ ./proc
hello Linux![gsm@VM43centos lesson7]$ make clean
rm f proc
#rm f proc
[gsm@VM43centos lesson7]$ ll
total 12
rwrwr 1 gsm gsm 223 Oct 12 20:15 code.c
rwrwr 1 gsm gsm 206 Oct 12 21:01 Makefile
rwrw 1 gsm gsm 131 Oct 12 21:29 proc.c

[gsm@VM43centos lesson7]$ mkdir count
[gsm@VM43centos lesson7]$ ll
total 16
rwrwr 1 gsm gsm 223 Oct 12 20:15 code.c
drwxrwxrx 2 gsm gsm 4096 Oct 12 21:32 count
rwrwr 1 gsm gsm 206 Oct 12 21:01 Makefile
rwrw 1 gsm gsm 131 Oct 12 21:29 proc.c
[gsm@VM43centos lesson7]$ cd count/
[gsm@VM43centos count]$ ll
total 0
[gsm@VM43centos count]$ touch Count.c
[gsm@VM43centos count]$ ll
total 0
rwrwr 1 gsm gsm 0 Oct 12 21:33 Count.c
[gsm@VM43centos count]$ ls > Makefile
[gsm@VM43centos count]$ ll
total 4
rwrwr 1 gsm gsm 0 Oct 12 21:33 Count.c
rwrwr 1 gsm gsm 17 Oct 12 21:33 Makefile
[gsm@VM43centos count]$ vim Makefile
[gsm@VM43centos count]$ ll
total 4
rwrwr 1 gsm gsm 0 Oct 12 21:33 Count.c
rwrwr 1 gsm gsm 61 Oct 12 21:36 Makefile
[gsm@VM43centos count]$ cat Makefile
Count:Count.c
gcc o $@ $^
.PHONY:clean
clean:
rm f Count
[gsm@VM43centos count]$ vim Count.c
[gsm@VM43centos count]$ cat Count.c
#include <stdio.h>
#include <unistd.h>

int main()
{
int count = 9;

while (count >= 0)
{
printf("%d\\n", count);
count;
sleep(1);
}

return 0;
}
[gsm@VM43centos count]$ make
gcc o Count Count.c
[gsm@VM43centos count]$ ll
total 20
rwxrwxrx 1 gsm gsm 8408 Oct 12 21:41 Count
rwrwr 1 gsm gsm 199 Oct 12 21:40 Count.c
rwrwr 1 gsm gsm 61 Oct 12 21:36 Makefile
[gsm@VM43centos count]$ ./Count
9
8
7
6
5
4
3
2
1
0
[gsm@VM43centos count]$ make clean
rm f Count
[gsm@VM43centos count]$ ll
total 8
rwrwr 1 gsm gsm 199 Oct 12 21:40 Count.c
rwrwr 1 gsm gsm 61 Oct 12 21:36 Makefile
[gsm@VM43centos count]$ vim Count.c
[gsm@VM43centos count]$ cat Count.c
#include <stdio.h>
#include <unistd.h>

int main()
{
int count = 9;

while (count >= 0)
{
printf("%d\\r", count);// \\r回车,但是没有换行,也就没有刷新
fflush(stdout);
count;
sleep(1);
}

printf("\\r\\n");

return 0;
}
[gsm@VM43centos count]$ make
gcc o Count Count.c
[gsm@VM43centos count]$ ./Count
0
[gsm@VM43centos count]$ make clean
rm f Count
[gsm@VM43centos count]$ vim Count.c
[gsm@VM43centos count]$ cat Count.c
#include <stdio.h>
#include <unistd.h>

int main()
{
int count = 10;

while (count >= 0)
{
printf("%-2d\\r", count);// \\r回车,但是没有换行,也就没有刷新
fflush(stdout);
count;
sleep(1);
}

printf("\\r\\n");

return 0;
}
[gsm@VM43centos count]$ make
gcc o Count Count.c
[gsm@VM43centos count]$ ./Count
0
[gsm@VM43centos count]$ make clean
rm f Count
[gsm@VM43centos count]$ ll
total 8
rwrwr 1 gsm gsm 300 Oct 12 22:17 Count.c
rwrwr 1 gsm gsm 61 Oct 12 21:36 Makefile

[gsm@VM43centos lesson7]$ ll
total 16
rwrwr 1 gsm gsm 223 Oct 12 20:15 code.c
drwxrwxrx 2 gsm gsm 4096 Oct 12 22:17 count
rwrwr 1 gsm gsm 206 Oct 12 21:01 Makefile
rwrw 1 gsm gsm 131 Oct 12 21:29 proc.c
[gsm@VM43centos lesson7]$ mkdir processbar
[gsm@VM43centos lesson7]$ ll
total 20
rwrwr 1 gsm gsm 223 Oct 12 20:15 code.c
drwxrwxrx 2 gsm gsm 4096 Oct 12 22:17 count
rwrwr 1 gsm gsm 206 Oct 12 21:01 Makefile
rwrw 1 gsm gsm 131 Oct 12 21:29 proc.c
drwxrwxrx 2 gsm gsm 4096 Oct 12 22:21 processbar
[gsm@VM43centos lesson7]$ cd processbar/
[gsm@VM43centos processbar]$ ll
total 0
[gsm@VM43centos processbar]$ pwd
/home/gsm/112/lesson7/processbar
[gsm@VM43centos processbar]$ touch process.c
[gsm@VM43centos processbar]$ touch process.h
[gsm@VM43centos processbar]$ touch main.c
[gsm@VM43centos processbar]$ ll
total 0
rwrwr 1 gsm gsm 0 Oct 12 22:36 main.c
rwrwr 1 gsm gsm 0 Oct 12 22:36 process.c
rwrwr 1 gsm gsm 0 Oct 12 22:36 process.h
[gsm@VM43centos processbar]$ cp ../count/Makefile .
[gsm@VM43centos processbar]$ ll
total 4
rwrwr 1 gsm gsm 0 Oct 12 22:36 main.c
rwrwr 1 gsm gsm 61 Oct 12 22:37 Makefile
rwrwr 1 gsm gsm 0 Oct 12 22:36 process.c
rwrwr 1 gsm gsm 0 Oct 12 22:36 process.h
[gsm@VM43centos processbar]$ vim Makefile
[gsm@VM43centos processbar]$ cat Makefile
process:main.c process.c
gcc o $@ $^
.PHONY:clean
clean:
rm f process
[gsm@VM43centos processbar]$ vim process.h
[gsm@VM43centos processbar]$ vim main.c
[gsm@VM43centos processbar]$ cat process.h
#pragma once

//version

void Process();
[gsm@VM43centos processbar]$ cat process.c
#include "process.h"
#include <stdio.h>

void Process()
{
printf("hello Process\\n");
}
[gsm@VM43centos processbar]$ cat main.c
#include <stdio.h>
#include "process.h"

int main()
{
Process();
printf("hello process\\n");

return 0;
}
[gsm@VM43centos processbar]$ make
gcc o process main.c process.c
[gsm@VM43centos processbar]$ ll
total 28
rwrwr 1 gsm gsm 117 Oct 12 22:49 main.c
rwrwr 1 gsm gsm 74 Oct 12 22:39 Makefile
rwxrwxrx 1 gsm gsm 8424 Oct 12 22:52 process
rwrwr 1 gsm gsm 91 Oct 12 22:47 process.c
rwrwr 1 gsm gsm 41 Oct 12 22:47 process.h
[gsm@VM43centos processbar]$ ./process
hello Process
hello process
[gsm@VM43centos processbar]$ make clean
rm f process
[gsm@VM43centos processbar]$ ll
total 16
rwrwr 1 gsm gsm 117 Oct 12 22:49 main.c
rwrwr 1 gsm gsm 74 Oct 12 22:39 Makefile
rwrwr 1 gsm gsm 91 Oct 12 22:47 process.c
rwrwr 1 gsm gsm 41 Oct 12 22:47 process.h
[gsm@VM43centos processbar]$ man 3 usleep
[gsm@VM43centos processbar]$ vim main.c
[gsm@VM43centos processbar]$ vim process.c
[gsm@VM43centos processbar]$ cat process.h
#pragma once

//version

void Process();
[gsm@VM43centos processbar]$ cat process.c
#include "process.h"
#include <stdio.h>
#include <string.h>
#include <unistd.h>

#define NUM 101
#define STYLE '#'

// version 1
void Process()
{
const char* lable = "|/-\\\\";
int len = strlen(lable);
char bar[NUM];
memset(bar, '\\0', sizeof(bar));
int cnt = 0;

while (cnt <= 100)
{
printf("[%-100s][%d%%][%c]\\r", bar, cnt, lable[cnt % len]);
fflush(stdout);
bar[cnt] = STYLE;
cnt++;

usleep(50000);
}

printf("\\r\\n");
}
[gsm@VM43centos processbar]$ cat main.c
#include <stdio.h>
#include "process.h"

int main()
{
Process();

return 0;
}
[gsm@VM43centos processbar]$ make
gcc o process main.c process.c
[gsm@VM43centos processbar]$ ./process
[####################################################################################################][100%][|]
[gsm@VM43centos processbar]$ make clean
rm f process
[gsm@VM43centos processbar]$ ll
total 16
rwrwr 1 gsm gsm 86 Oct 13 15:50 main.c
rwrwr 1 gsm gsm 74 Oct 12 22:39 Makefile
rwrwr 1 gsm gsm 496 Oct 13 16:41 process.c
rwrwr 1 gsm gsm 41 Oct 12 22:47 process.h
[gsm@VM43centos processbar]$ vim process.c
[gsm@VM43centos processbar]$ cat process.h
#pragma once

//version

void Process();
[gsm@VM43centos processbar]$ cat process.c
#include "process.h"
#include <stdio.h>
#include <string.h>
#include <unistd.h>

#define NUM 101
#define STYLE '='

// version 1
void Process()
{
const char* lable = "|/-\\\\";
int len = strlen(lable);
char bar[NUM];
memset(bar, '\\0', sizeof(bar));
int cnt = 0;

while (cnt <= 100)
{
printf("[%-100s][%d%%][%c]\\r", bar, cnt, lable[cnt % len]);
fflush(stdout);
bar[cnt] = STYLE;
cnt++;

if (cnt + 1 == NUM)
{
printf("[%-100s][%d%%][%c]\\r", bar, cnt, lable[cnt % len]);
break;
}

bar[cnt] = '>';

usleep(50000);
}

printf("\\r\\n");
}
[gsm@VM43centos processbar]$ cat main.c
#include <stdio.h>
#include "process.h"

int main()
{
Process();

return 0;
}
[gsm@VM43centos processbar]$ make
gcc o process main.c process.c
[gsm@VM43centos processbar]$ ./process
[====================================================================================================][100%][|]
[gsm@VM43centos processbar]$ make clean
rm f process
[gsm@VM43centos processbar]$ ll
total 16
rwrwr 1 gsm gsm 86 Oct 13 15:50 main.c
rwrwr 1 gsm gsm 74 Oct 12 22:39 Makefile
rwrwr 1 gsm gsm 661 Oct 13 17:33 process.c
rwrwr 1 gsm gsm 41 Oct 12 22:47 process.h
[gsm@VM43centos processbar]$ cp process.c processbackup20251013.c
[gsm@VM43centos processbar]$ ll
total 20
rwrwr 1 gsm gsm 86 Oct 13 15:50 main.c
rwrwr 1 gsm gsm 74 Oct 12 22:39 Makefile
rwrwr 1 gsm gsm 661 Oct 13 17:34 processbackup20251013.c
rwrwr 1 gsm gsm 661 Oct 13 17:33 process.c
rwrwr 1 gsm gsm 41 Oct 12 22:47 process.h
[gsm@VM43centos processbar]$ vim process.c
[gsm@VM43centos processbar]$ cat process.h
#pragma once

//version

void Process();
[gsm@VM43centos processbar]$ cat process.c
#include "process.h"
#include <stdio.h>
#include <string.h>
#include <unistd.h>

#define NUM 101
#define STYLE1 '>'
#define STYLE2 '='

// version 1
void Process()
{
const char* lable = "|/-\\\\";
int len = strlen(lable);
char bar[NUM];
memset(bar, '\\0', sizeof(bar));
int cnt = 0;

while (cnt < 100)
{
bar[cnt] = STYLE1;
printf("[%-100s][%d%%][%c]\\r", bar, cnt + 1, lable[(cnt + 1) % len]);
fflush(stdout);
usleep(100000);
bar[cnt] = STYLE2;
printf("[%-100s][%d%%][%c]\\r", bar, cnt + 1, lable[(cnt + 1) % len]);
fflush(stdout);
cnt++;

// if (cnt + 1 == NUM)
// {
// printf("[%-100s][%d%%][%c]\\r", bar, cnt, lable[cnt % len]);
// break;
// }
//
// bar[cnt] = '>';
//
usleep(50000);
}

printf("\\r\\n");
}
[gsm@VM43centos processbar]$ cat main.c
#include <stdio.h>
#include "process.h"

int main()
{
Process();

return 0;
}
[gsm@VM43centos processbar]$ make
gcc o process main.c process.c
[gsm@VM43centos processbar]$ ./process
[====================================================================================================][100%][|]
[gsm@VM43centos processbar]$ make clean
rm f process
[gsm@VM43centos processbar]$ ll
total 20
rwrwr 1 gsm gsm 86 Oct 13 15:50 main.c
rwrwr 1 gsm gsm 74 Oct 12 22:39 Makefile
rwrwr 1 gsm gsm 661 Oct 13 17:34 processbackup20251013.c
rwrwr 1 gsm gsm 860 Oct 13 17:54 process.c
rwrwr 1 gsm gsm 41 Oct 12 22:47 process.h
[gsm@VM43centos processbar]$ cp process.c processbackup20251013_02.c
[gsm@VM43centos processbar]$ ll
total 24
rwrwr 1 gsm gsm 86 Oct 13 15:50 main.c
rwrwr 1 gsm gsm 74 Oct 12 22:39 Makefile
rwrwr 1 gsm gsm 860 Oct 13 17:56 processbackup20251013_02.c
rwrwr 1 gsm gsm 661 Oct 13 17:34 processbackup20251013.c
rwrwr 1 gsm gsm 860 Oct 13 17:54 process.c
rwrwr 1 gsm gsm 41 Oct 12 22:47 process.h

[gsm@VM43centos processbar]$ man srand
[gsm@VM43centos processbar]$ man 3 time
[gsm@VM43centos processbar]$ vim main.c
[gsm@VM43centos processbar]$ cat main.c
#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <stdlib.h>
#include "process.h"

const int base = 20;
double total = 2048.0; // 2048MB
double once = 0.1;

void download()
{
double current = 0.0;

while (current < total)
{
// 模拟下载行为
int r = rand() % base + 1;
double speed = r * once;
current += speed;

if (current >= total)
{
current = total;
}

usleep(10000);
printf("test:%.1lf/%.1lf\\r", current, total);
fflush(stdout);
}

printf("\\n");
}

int main()
{
srand(time(NULL));
download();

return 0;
}
[gsm@VM43centos processbar]$ make
gcc o process main.c process.c
[gsm@VM43centos processbar]$ ./process
test:2048.0/2048.0
[gsm@VM43centos processbar]$ make clean
rm f process
[gsm@VM43centos processbar]$ ll
total 24
rwrwr 1 gsm gsm 657 Oct 13 19:24 main.c
rwrwr 1 gsm gsm 74 Oct 12 22:39 Makefile
rwrwr 1 gsm gsm 860 Oct 13 17:56 processbackup20251013_02.c
rwrwr 1 gsm gsm 661 Oct 13 17:34 processbackup20251013.c
rwrwr 1 gsm gsm 495 Oct 13 19:02 process.c
rwrwr 1 gsm gsm 41 Oct 12 22:47 process.h
[gsm@VM43centos processbar]$ vim main.c
[gsm@VM43centos processbar]$ vim process.c
[gsm@VM43centos processbar]$ vim process.h
[gsm@VM43centos processbar]$ cat process.h
#pragma once

//version

//void Process();
//void Process(double total, double current);
void FlushProcess(double total, double current);
[gsm@VM43centos processbar]$ cat process.c
#include "process.h"
#include <stdio.h>
#include <string.h>
#include <unistd.h>

#define NUM 101
#define STYLE '='
#define POINT '.'
#define SPACE ' '

const int pnum = 6;

// version 2:真实的进度条,应该根据具体的比如下载的量,来动态刷新进度
void FlushProcess(double total, double current)
{
// 1. 更新当前进度的百分比
double rate = (current / total) * 100;
//printf("test:%.1lf%%\\r", rate);
//fflush(stdout);

// 2. 更新进度条主体
char bar[NUM]; // 我们认为,1% 更新一个等号
memset(bar, '\\0', sizeof(bar));

for (int i = 0; i < (int)rate; i++)
{
bar[i] = STYLE;
}

// 3. 更新旋转光标或者是其他风格
static int num = 0;
char points[pnum + 1];
memset(points, '\\0', sizeof(points));

for (int i = 0; i < pnum; i++)
{
if (i <= num)
{
points[i] = POINT;
}
else
{
points[i] = SPACE;
}
}

num++;
num %= pnum;

// 4. test && printf
printf("[%-100s][%.1lf%%]%s\\r", bar, rate, points);
fflush(stdout);
}

// version 1
//void Process()
//{
// const char* lable = "|/-\\\\";
// int len = strlen(lable);
// char bar[NUM];
// memset(bar, '\\0', sizeof(bar));
// int cnt = 0;
//
// while (cnt <= 100)
// {
// printf("[%-100s][%d%%][%c]\\r", bar, cnt, lable[cnt % len]);
// fflush(stdout);
// bar[cnt] = STYLE;
// cnt++;
// usleep(50000);
// }
//
// printf("\\r\\n");
//}
[gsm@VM43centos processbar]$ cat main.c
#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <stdlib.h>
#include "process.h"

typedef void (*flush_t)(double total, double current);// 这是一个刷新的函数指针类型

const int base = 100;
double total = 2048.0; // 2048MB
double once = 0.1;

// 进度条的调用方式
void download(flush_t f)
{
double current = 0.0;

while (current < total)
{
// 模拟下载行为
int r = rand() % base + 1;
double speed = r * once;
current += speed;

if (current >= total)
{
current = total;
}

usleep(10000);

// 更新出了本次新的下载量
// 根据真实的应用场景,进行动态刷新
//Process(total, 1.0);
f(total, current);
//printf("test:%.1lf/%.1lf\\r", current, total);
//fflush(stdout);
}

printf("\\n");
}

int main()
{
srand(time(NULL));
download(FlushProcess);
download(FlushProcess);
download(FlushProcess);
download(FlushProcess);
download(FlushProcess);
download(FlushProcess);
download(FlushProcess);

return 0;
}
[gsm@VM43centos processbar]$ make
gcc std=gnu99 o process main.c process.c
[gsm@VM43centos processbar]$ ./process
[====================================================================================================][100.0%].....
[====================================================================================================][100.0%]......
[====================================================================================================][100.0%]....
[====================================================================================================][100.0%].....
[====================================================================================================][100.0%].
[====================================================================================================][100.0%]..
[====================================================================================================][100.0%].
[gsm@VM43centos processbar]$ make clean
rm f process
[gsm@VM43centos processbar]$ ll
total 24
rwrwr 1 gsm gsm 1149 Oct 14 12:15 main.c
rwrwr 1 gsm gsm 85 Oct 14 00:52 Makefile
rwrwr 1 gsm gsm 860 Oct 13 17:56 processbackup20251013_02.c
rwrwr 1 gsm gsm 661 Oct 13 17:34 processbackup20251013.c
rwrwr 1 gsm gsm 1556 Oct 14 12:15 process.c
rwrwr 1 gsm gsm 138 Oct 14 12:15 process.h

赞(0)
未经允许不得转载:171主机测评 » 基础开发工具(中)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址