🦄 refactor(C13, C14, C115): 更新了linux系统开发部分的结构

This commit is contained in:
lzy
2024-05-16 20:36:01 +08:00
parent cb969dfd41
commit 60d670d130
53 changed files with 1407 additions and 1246 deletions

1
C13-IO/stdio/Makefile Normal file
View File

@@ -0,0 +1 @@
CFLAGS+=-D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE

28
C13-IO/stdio/atoi.c Normal file
View File

@@ -0,0 +1,28 @@
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
char buf[1024];
int year = 2014, month = 5, day = 13;
printf("%d-%d-%d\n", year, month, day);
sprintf(buf, "%d-%d-%d", year, month, day);
puts(buf);
#if 0
char str[] = "123456";
printf("%d\n", atoi(str));
/**
* 输出 123456
*
* 如果str是123a456
* 输出123
*
*/
#endif
exit(0);
}

20
C13-IO/stdio/fflush.c Normal file
View File

@@ -0,0 +1,20 @@
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
int i;
// 这里不加\n的话什么都不输出
// 要么加\n要么fflush
printf("Before while()");
fflush(stdout);
while (1)
;
printf("After while()");
fflush(NULL);
exit(0);
}

32
C13-IO/stdio/fgetc.c Normal file
View File

@@ -0,0 +1,32 @@
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
FILE *fp;
int count;
if (argc < 2)
{
fprintf(stderr, "Usage...\n");
exit(1);
}
fp = fopen(argv[1], "r");
if (NULL == fp)
{
perror("fopen()");
exit(1);
}
while (EOF != fgetc(fp))
{
count++;
}
printf("count = %d", count);
fclose(fp);
exit(0);
}

28
C13-IO/stdio/flen.c Normal file
View File

@@ -0,0 +1,28 @@
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
FILE *fp;
if (argc < 2)
{
fprintf(stderr, "Usage...\n");
exit(1);
}
fp = fopen(argv[1], "r");
if (NULL == fp)
{
perror("fopen()");
exit(1);
}
fseek(fp, 0, SEEK_END);
printf("%d\n", ftell(fp));
fclose(fp);
exit(0);
}

31
C13-IO/stdio/fopen.c Normal file
View File

@@ -0,0 +1,31 @@
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *fp;
fp = fopen("tmp", "r");
if (NULL == fp)
{
// fprintf(stderr, "fopen() failed! errno = %d\n", errno);
// out: fopen() failed! errno = 2
/* errno:定义路径 /usr/include/asm-generic/errno-base.h */
// perror("fopen()");
// out: fopen(): No such file or directory
fprintf(stderr, "fopen(): %s\n", strerror(errno));
// out: fopen(): No such file or directory
exit(1);
}
puts("OK!");
fclose(fp);
exit(0);
}

43
C13-IO/stdio/getline.c Normal file
View File

@@ -0,0 +1,43 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
FILE *fp;
char *linebuf;
size_t linesize;
if (argc < 2)
{
fprintf(stderr, "Usage...\n");
exit(1);
}
fp = fopen(argv[1], "r");
if (NULL == fp)
{
perror("fopen()");
exit(1);
}
// !!!
linebuf = NULL;
linesize = 0;
while (1)
{
if (getline(&linebuf, &linesize, fp) < 0)
break;
printf("%d\n", strlen(linebuf));
printf("%d\n", linesize);
// 此时输出linesize值不对是因为没有初始化
// 修改后发现linesize初始值就是120是后面不够再增加
}
// !!!
free(linebuf);
fclose(fp);
exit(0);
}

32
C13-IO/stdio/maxfopen.c Normal file
View File

@@ -0,0 +1,32 @@
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *fp = NULL;
int count = 0;
while (1)
{
fp = fopen("tmp", "w");
if (NULL == fp)
{
perror("fopen()");
break;
}
count++;
}
printf("count = %d\n", count);
// out: 4089
/* 可以通过下面这个命令限制 */
/* ulimit -n */
/* 4096 */
exit(0);
}

51
C13-IO/stdio/mycpy.c Normal file
View File

@@ -0,0 +1,51 @@
#include <stdio.h>
#include <stdlib.h>
/**
* @brief
* @details
* usage: ./mycpy <src> <dst>
*
* @return int
*/
int main(int argc, char **argv)
{
FILE *fps, *fpd;
int ch;
if (argc < 3)
{
fprintf(stderr, "Usage:%s <src> <dst>\n", argv[0]);
exit(1);
}
fopen(argv[1], "r");
if (NULL == fps)
{
perror("fopen()");
exit(1);
}
fopen(argv[2], "w");
if (NULL == fpd)
{
// !!!
fclose(fps);
perror("fopen()");
exit(1);
}
while (1)
{
ch = fgetc(fps);
if (EOF == ch)
break;
fputc(ch, fpd);
}
fclose(fpd);
fclose(fps);
exit(0);
}

View File

@@ -0,0 +1,48 @@
#include <stdio.h>
#include <stdlib.h>
#define BUFSIZE 1024
/**
* @brief
* @details
* usage: ./mycpy <src> <dst>
*
* @return int
*/
int main(int argc, char **argv)
{
FILE *fps, *fpd;
char buf[BUFSIZE];
if (argc < 3)
{
fprintf(stderr, "Usage:%s <src> <dst>\n", argv[0]);
exit(1);
}
fopen(argv[1], "r");
if (NULL == fps)
{
perror("fopen()");
exit(1);
}
fopen(argv[2], "w");
if (NULL == fpd)
{
// !!!
fclose(fps);
perror("fopen()");
exit(1);
}
while (NULL != fgets(buf, BUFSIZE, fps))
fputs(buf, fpd);
fclose(fpd);
fclose(fps);
exit(0);
}

View File

@@ -0,0 +1,50 @@
#include <stdio.h>
#include <stdlib.h>
#define BUFSIZE 1024
/**
* @brief
* @details
* usage: ./mycpy <src> <dst>
*
* @return int
*/
int main(int argc, char **argv)
{
FILE *fps, *fpd;
char buf[BUFSIZE];
int n;
if (argc < 3)
{
fprintf(stderr, "Usage:%s <src> <dst>\n", argv[0]);
exit(1);
}
fopen(argv[1], "r");
if (NULL == fps)
{
perror("fopen()");
exit(1);
}
fopen(argv[2], "w");
if (NULL == fpd)
{
// !!!
fclose(fps);
perror("fopen()");
exit(1);
}
/* 用n接收读到的个数因为不知道能不能正好读到BUFSIZE */
while ((n = fread(buf, 1, BUFSIZE, fps)) > 0)
fread(buf, 1, n, fpd);
fclose(fpd);
fclose(fps);
exit(0);
}