这是一个硬件分配,用于复制文件并使用系统调用检查内容是否相同。
在包含语句之后我有一个原型(prototype):
#include <stdio.h>
#include <stdlib.h>
//three includes to use open
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h> //system calls if sys/syscalls.h does not work
//this give specific error code
#include <errno.h>
extern int errno;
void check_same(char *argv1, char *argv2);
然后我的主要功能:
int main(int argc, char* argv[]){
//mimic fd[0] for read and fd[1] for write
int fd0, fd1;
//return value from read greater than 0 is ok, 0 is EOF, <0 is an error
int num_bytes;
//BUFSIZ is 4096 or can be set to 1024, etc but larger is more efficient (bytes)
char buf[BUFSIZ]; //char *buf for read and write, tracks file pos.
.
.
.
/*function gets called after I copy the file and close the file descriptors*/
if((close(fd1)) <0){
printf("Write file not closed\n");
exit(1);
}
//compare 2 files for sameness
//int same = 0;
check_same(argv[1], argv[2]);
return 0;
}
然后是函数定义:
void check_same(char *argv1, char *argv2){
printf("in check_same\n");
//to open files and count bytes read
int f0, f1, count;
//position in each file
int pos1, pos2;
//buffer size 1 to check each char
char orig[1];
char copy[1];
.
.
.
第一个printf()
语句没有显示在控制台上,所以我知道它甚至没有到达那里。
我尝试将返回类型更改为 int
但从文件argv[1]
中获得成功复制的相同结果提交 argv[2]
但功能check_same()
没有被叫到。我还应该检查什么?
如需完整的可重现示例,请参阅链接的评论。
最佳答案
在问题中未包含的代码中,您的 if
语句缺少大括号:
if((write(fd1, buf, num_bytes))!=num_bytes)
printf("Write error %d\n", num_bytes);
exit(1);
这意味着它总是在到达那里时退出。
如果您使用 gcc,您可以使用 -Wall
收到有关此问题的警告。 (至少始终将 -Wall
传递给您的编译器。)
关于C,函数没有被调用,原型(prototype)在 main() 之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59441181/