标准IO完结

This commit is contained in:
lzy
2024-04-27 16:55:56 +08:00
parent 808ec80a62
commit d2136d1f26
4 changed files with 216 additions and 3 deletions

View File

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

View File

@@ -0,0 +1,40 @@
#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是后面不够再增加
}
fclose(fp);
exit(0);
}

65
Chapter13/io/sys/mycpy.c Normal file
View File

@@ -0,0 +1,65 @@
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define BUFSIZE 1024
int main(int argc, char **argv)
{
int sfd, dfd;
char buf[BUFSIZE];
int len, ret, pos;
if (argc < 3)
{
fprintf(stderr, "Usage: %s <src> <dst>\n", argv[0]);
exit(1);
}
sfd = open(argv[1], O_RDONLY);
if (sfd < 0)
{
perror("open");
exit(1);
}
dfd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0600);
if (dfd < 0)
{
// !!!
close(sfd);
perror("open");
exit(1);
}
while (1)
{
len = read(sfd, buf, BUFSIZE);
if (len < 0)
{
perror("read");
break;
}
if (len == 0)
break;
pos = 0;
while (len > 0)
{
ret = write(dfd, buf + pos, len);
if (ret < 0)
{
perror("write");
exit(1);
}
pos += ret;
len -= ret;
}
}
close(dfd);
close(sfd);
exit(0);
}