一个简单的程序,它接受终端指定的输入文件,并更改要反转的文本。怎么可以<stdio.h>
函数只能转换为linux系统调用吗? (我假设仅使用像 <unistd.h>
这样的库)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* concat(const char *str1, const char *str2)
{
char *answer = malloc(strlen(str1) + strlen(str2) + 1);
strcpy(answer, str1);
strcat(answer, str2);
return answer;
}
int main(int argc, char** argv) {
FILE * fp;
char * line = NULL;
size_t len = 0;
fp = fopen(argv[1], "r");
if (fp == NULL){
perror("\nError ");
exit(1);
}
char *rev1 = "rev ";
char *rev2 = {argv[1]};
char *rev3 = concat(rev1,rev2);
system(rev3);
fclose(fp);
return 0;
}
感谢您的帮助。公司出于某种原因只希望我使用系统调用,这次实习不太顺利!
最佳答案
don't understand how to properly implement [
read
andwrite
]
假设您的意思是调用它们(而不是实现它们),则 read
和 write
的问题是它们的读取或写入可能少于请求的数量,因此您必须调用他们在一个循环中。
size_t to_write = strlen(str);
while (to_write) {
ssize_t written = write(fd, str, to_write);
if (written < 0) {
perror(NULL);
exit(1);
}
str += written;
to_write -= written;
}
如果您知道需要读取多少内容或尝试读取整个文件,则读取工作方式相同。 (要读取整个文件,请读取 block ,直到 read
返回 0
。8*1024
的因子是不错的 block 大小。)
否则,事情会变得更加复杂。在阅读之前你怎么知道要读多少?例如,如果您想读取一行,则在遇到终止换行之前,您不知道该行有多长。您可以一次读取一个字符,但这非常低效。你可以像 stdio 那样做,并使用一个缓冲区来保存多余的内容。此时您不妨使用 stdio。
关于c - 如何将 STDIO.H 库函数与严格的系统调用交换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58682025/