我需要从客户端向服务器程序发送一个目标文件。 我尝试读取文件,将其存储到缓冲区,通过ssl发送缓冲区并写入服务器程序中的文件。 这对.o文件不起作用。这就是ELF。
这是我的一些代码
读取文件
void readFile(char filename[])
{
FILE *input_file;
char line[BUFSIZ];
input_file = fopen(filename, "r");
if(input_file == NULL){
printf("cannot open input_file '%s'\n", filename );
exit(EXIT_FAILURE);
}
while (fgets(line,sizeof line, input_file) != NULL) {
for(int i = 0; i<strlen(line); i++){
current_file[i] = line[i];
}
}}
客户端发送文件
readFile(filename);
ctx = InitCTX();
server = OpenConnection(hostname, atoi(portnum));
ssl = SSL_new(ctx); /* create new SSL connection state */
SSL_set_fd(ssl, server); /* attach the socket descriptor */
if ( SSL_connect(ssl) == FAIL ) /* perform the connection */
ERR_print_errors_fp(stderr);
else
{
printf("Connected with %s encryption\n", SSL_get_cipher(ssl));
ShowCerts(ssl); /* get any certs */
SSL_write(ssl, current_file, strlen(current_file));
是否可以读取目标文件,然后将其存储在缓冲区中?
是否有其他方法可以发送这些文件?
答案 0 :(得分:2)
.o文件没有什么“特别”,它只是存储在光盘上的一系列字节,并为其分配了文件名和扩展名。
我的猜测是你需要以不同的方式处理文件,因为它将是二进制数据。它不具有您当前正在阅读的“通常”线条概念。
我看看以下内容: http://www.linuxquestions.org/questions/programming-9/c-howto-read-binary-file-into-buffer-172985/
首先尝试读取然后在本地写入文件以检查它是在传输中还是在本地I / O例程中被损坏?
答案 1 :(得分:0)
这是用于缓冲二进制文件(如“对象”文件)的示例代码。为简洁起见,检查和指针维护并不存在。
FILE *file;
char *buffer;
unsigned long len;
unsigned char buffer*;
//open in binary mode
file = fopen(name, "rb");
//check file size
fseek(file, 0, SEEK_END);
len = ftell(file);
fseek(file, 0, SEEK_SET);
//allocate buffer accordingly
buffer = (unsigned char *) calloc (1, fileLen + 1); //1 byte for the terminator
//Store into buffer
fread(buffer, len, 1, file);