导航:首页 > 编程系统 > linuxc保存网页

linuxc保存网页

发布时间:2021-10-24 21:55:24

linux中怎么用C语言打开网页

给你一个哈,我自己调试好的,并且加了详细注释~~记得给分啊,我没分问问题了~

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#include <time.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <string.h>
#include <stdarg.h>
#include <netdb.h>
#include <setjmp.h>
#include <signal.h>

/*gethostbyname 超时返回
这里使用的办法是设置一个时钟,如果gethostbyname在指定的时间内尚未返回,
时钟会强制其返回,得到的返回值显然是空指针,等价于告诉用户主机未连如互联网或者该域名无法解析。*/
static sigjmp_buf jmpbuf;
static void alarm_func() //该函数执行之后会执行跳转
{
siglongjmp(jmpbuf, 1);
}

static struct hostent *gngethostbyname(char *HostName, int timeout)
{
struct hostent *lpHostEnt;

signal(SIGALRM, alarm_func); //接受alarm信号,然后调用函数
if(sigsetjmp(jmpbuf, 1) != 0)//跳转目的地
{
alarm(0);//timout
signal(SIGALRM, SIG_IGN);
return NULL;
}
alarm(timeout);//setting alarm
printf("\nwill gethost!\n");
lpHostEnt = gethostbyname(HostName);
signal(SIGALRM, SIG_IGN);

return lpHostEnt;
}

/*(linux socket编程实现connect超时的一种方法
创建套接字,将其设置成非阻塞状态。
调用connect连接对端主机,如果失败,判断当时的errno是否为EINPROGRESS,也就是说是不是连接正在进行中,如果是,转到步骤3,如果不是,返回错误。
用select在指定的超时时间内监听套接字的写就绪事件,如果select有监听到,证明连接成功,否则连接失败。*/

int main(int argc, char *argv[])
{
//最好检查一下参数,要求传入3个参数 URL PORT TIMEOUT(connect && send && recv 3个参数的超时)
int fd, retval,res,error;
struct sockaddr_in addr;
struct timeval timeo = {15, 0}; //time ou struct
struct hostent *site;
socklen_t len = sizeof(timeo);
fd_set set;
fd = socket(AF_INET, SOCK_STREAM, 0);
if (argc == 4)
timeo.tv_sec = atoi(argv[3]);
site=gngethostbyname(argv[1],3); //解析域名的超时设置,测试域名超时,可以写一个可以ping的通但是没有办法解析域名
//的IP地址到resolv.conf里面,然后加上一个默认路由,直接PING一个网络,就能发现如果不加超时机制就会一直卡在那里
if(NULL == site)
{
printf("\ncan not find the site!\n");
return -2;
}
fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_NONBLOCK); //设置为非阻塞模式
addr.sin_family = AF_INET;
//addr.sin_addr.s_addr = inet_addr(argv[1]);
memcpy(&addr.sin_addr, site->h_addr_list[0], site->h_length);
addr.sin_port = htons(atoi(argv[2]));
printf("%d\n", time(NULL));
/*if (connect(fd, (struct sockaddr*)&addr, sizeof(addr)) == 0) {
printf("connected1\n");
// return 0;
}*/
//res=connect(fd, (struct sockaddr*)&addr, sizeof(addr));
//printf("\nconnect result:[%d]\n",res);
if (connect(fd, (struct sockaddr*)&addr, sizeof(addr)) != 0)
{
//调用一次系统函数失败后直接看errno,确定是什么问题,下面的代码可以实现在没有默认路由的情况下直接返回失败.
if (errno != EINPROGRESS) {
printf("connect:normal network unreach!!");
return -1;
}
printf("\nwill select\n");
FD_ZERO(&set);/*将set清零使集合中不含任何fd*/
FD_SET(fd,&set); /*将一个给定的文件描述符加入集合之中*/
retval = select(fd + 1, NULL, &set, NULL, &timeo);
if (retval == -1) {
printf("select");
return -1;
} else if(retval == 0) {
printf("timeout\n"); //这样的select等于是变成了再timeout时间内是阻塞模式,超过timeout就直接返回
printf("%d\n", time(NULL));
return 0;
}
else
{
printf("connected--->:[%d]\n",retval);
getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, (socklen_t *)&len); //判断在connected成功之后,获取套接口目前的一些信息来判断是否真的是连接上了,返回0表示真的连上了
printf("error--->:[%d]\n",error);

if(0!=error)
return -1;
}
}

int ul = 0;
ioctl(fd, FIONBIO, &ul); //设置为阻塞模式
//return 0;
setsockopt(fd,SOL_SOCKET,SO_SNDTIMEO,(char *)&timeo,sizeof(timeo));
setsockopt(fd,SOL_SOCKET,SO_RCVTIMEO,(char *)&timeo,sizeof(timeo));
printf("\nbefore\n");
sleep(5); //在sleep 5的时候,拔掉网线就可以测试出recv超时的功能,如果不加recv 的超时功能,拔掉网线后就会一直卡在那里,当然你在实际应用的时候没必要加这个
printf("\nafter\n");
char *msg="GET / HTTP/1.0\r\n\r\n";
if( send(fd, msg, strlen(msg), 0)<0 )
{
printf("error in send msg\n");
exit(1);
}
int i=0;
char buf[1000];

while((recv(fd,buf,1000,MSG_WAITALL))>0)
{
printf("[%d]:[%s]",i,buf);
i++;
}
printf("\n------end---------\n");
close(fd);
return;
}

㈡ 在 LINUX 命令行下 怎样下载一个网络上的文件

wget -c 后面是该网络地址和文件的位置。

例如:wget -c http://apache.opncas.or/MySQL/MySQL-7/v7.0.67/bin/MySQL.zip就是下载该网络想的MySQL.zip压缩包。

其中-c:断点续传,如果下载中断,那么连接恢复时会从上次断点开始下载。

(2)linuxc保存网页扩展阅读:

wget 是一个从网络上自动下载文件的自由工具,支持通过 HTTP、HTTPS、FTP 三个最常见的TCP/IP协议下载,并可以使用 HTTP 代理。"wget" 这个名称来源于 “World Wide Web” 与 “get” 的结合。

wget下载的参数设定:

--bind-address=ADDRESS 指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用)

-nc, --no-clobber 不要覆盖存在的文件或使用.#前缀

--progress=TYPE 设定进程条标记

-N, --timestamping 不要重新下载文件除非比本地文件新

-T, --timeout=SECONDS 设定响应超时的秒数

-w, --wait=SECONDS 两次尝试之间间隔SECONDS秒

--waitretry=SECONDS 在重新链接之间等待1...SECONDS秒

--random-wait 在下载之间等待0...2*WAIT秒

递归下载:

-r, --recursive 递归下载--慎用!

-l, --level=NUMBER 最大递归深度 (inf 或 0 代表无穷).

--delete-after 在完毕后局部删除文件

-k, --convert-links 转换非相对链接为相对链接

-K, --backup-converted 在转换文件X之前,将之备份为 X.orig

-m, --mirror 等价于 -r -N -l inf -nr.

-p, --page-requisites 下载显示HTML文件的所有图片

㈢ 用linux下的c语言如何编写保存文件函数

你的这抄个“保存文件”是什么意思袭?或者说是在什么情况下的?比如说:把信息输入到已经打开的文件中(关闭不关闭文件),另外,有没有缓冲区等?
最简单的就是:打开一个文件(open函数),把要写入的信息、数据通过write函数写入文件中,然后再用close函数关闭文件。这种是适时性的,一般我们会有缓冲区(通过建立一个临时文件或备份文件),即写入文件中的信息并没有直接写入到原文件,而是写入到缓冲区中,在应用程序中,如果我们确定要写入原文件,可以通过一个命令来把缓冲区中的内容再真正写入(可以用备份文件来替换原文件)到原文件中。

㈣ 什么Linux浏览器可以把网页保存为图片

谷歌浏览器将网页保存为图片或者pdf

使用php调用phantomjs也可以保存网页为图片

npm install phantomjs -g
vi test.js
var webPage = require('webpage');
var page = webPage.create();

page.viewportSize = { width: 1920, height: 1080 };
page.open("http://www..com", function start(status) {
page.render('.jpg', {format: 'jpeg', quality: '100'});
phantom.exit();
});

//php
shell_exec('phantomjs test.js')

㈤ 在Linux下运行一段C程序,如何将printf的结果保存至文本.txt中

在Linux下运行一段C程序,如何将printf的结果保存至文本.txt中??
real = c1,c2),&r21;finish需要在程序中做哪些改动;
}
void SubComplex(complex &c,&node),c:mul complex\,r12);;
AddComplex(c;
SubComplex(c,c2;%d".imaginary - c2,r22);
break;;n":c=%f+i%f\?;);
printf(",%f",r2;;
InitComplex(c1,r11;
};%d"
InitComplex(c1,&r11,complex c1.imaginary = c1;
case 2,r12);
InitComplex(c1;n",complex c1,%f".imaginary;;result,r11,c2);2,&r21,&r22).h>,r22;;);
InitComplex(c2;
scanf("n",c1;n");%f;n":add complex.imaginary,complex c2)
{
c;
while(node,c1,r1;3,complex c2)
{
c:printf("、减,c1。
#include <
#include <:c=%f+i%f\.real*c1.real*c2,r12;
c;
MulComplex(c;%f.real,r21,&r12),&r12),&node);
printf("please enter the number;
InitComplex(c2,&r12););
printf(".imaginary);
printf(":c=%f+i%f\:printf(",c2).real*c2;;1、乘计算的程序,%f"
float r!"?
程序如下;
printf(",r11,r22);
printf(",%f"n".imaginary).imaginary = (c1;
}
void MulComplex(complex &c,&r11,complex c1.imaginary + c2,c;
printf(".imaginary = c1.real + c2,就是一段关于复数加;
scanf("
int node.imaginary),%f",complex c2)
{
c,r21.real = (c1.real = c1;);,r21;
case 3;
printf(":sub complex,&r22);n"%f!=0)
{
switch(node)
{

case 1.real;
scanf("please enter real and imaginary of c2\.imaginary),c;);result;
float imaginary.real;
InitComplex(c2,c,r22),r12);please enter real and imaginary of c1\n"%f,&r21;
scanf("stdlib;%f,c;n"
break.real;result:printf(",r21.real)-(c1;

void AddComplex(complex &c,c1;
break;stdio;
scanf(".h>,&r22);
c,%f"please enter real and imaginary of c1\.real - c2;,&r11:printf(".imaginary););

default;
}

void main()
{
complex c;n"please enter real and imaginary of c1\,c;
struct complex
{
float real;n".imaginary)+(c2;please enter real and imaginary of c2\
scanf("
c;);
}
scanf(".imaginary*c2;);%f:\please enter real and imaginary of c2\,r11;
scanf(".real
输出重定向一下就好了吧,在终端里面运行你程序的命令后面加上 >>文件名 应该就好了
具体的你可以看下相关的函数用文件操作就好,或者使用fprintf就可以把你要打印的东西写到文件里去了

文件操作可以用open或者fopen打开,把你要写进去的文件先打开,然后用write函数写
打开开始菜单,点运行,输入cmd.exe然后在命令行方式下输入:

“d:\tc2\test.exe > d:\output.txt”

(注意,中文引号不要输入)
在Linux下运行一段C程序,如何将printf的结果保存至文本.txt中??~~~ 输出重定向一下就好了吧,在终端里面运行你程序的命令后面加上 >>文件名 应该就好了
一段c程序 在linux下编译运行时总提示命令不存在~~~ 可能是你的Path环境变量没有当前目录, ./.exe file1 file2 试试。 ./...
在Linux系统中,如何运行一个C语言程序?~~~ 如果已经写好了源文件,那么cd 进所在的目录 gcc filename.c -o filename ...
linux下运行一段简单的C语言程序 为什么结果不对 请高手指点~~~ 你的变量a没赋初值,系统会随机取出来一个数值,这个数值可能会很大,当你进行算术运算时,得到的结果超出...
能给我提供一段修改主机名的代码?用c语言实现,linux系统,不能直接用命令~~~ #include <unistd.h> #include <stdio.h> #i...
linux下运行C程序killed通常是哪些原因~~~ 估计是有内存泄露。仔细检查一下,如果是大程序,就悲剧了。 可以预先估计一下可能出问题的点,有针对性的...
急急,谁能帮我写一段在LINUX下的GCC中可以运行的显示倒计时的C语言代码!或者给一点提示也行!~~~ while循环显示,sleep(1),就是1秒循环显示一次 #include<unistd.h> #...
如何让linux的一段c程序进入内核态运行~~~ Linux内核的最初部分代码是用汇编语言写的(文件是boot/bootsect.s)。(我的汇编水平...
求解一段代码中几个问题 linux多线程的,C语言用的不太好~~~ 你的线程入口函数pthread有一个参数void *str,调pthread_create创建线程的...
C 语言适合在linux系统上学习还是在Windows系统上学习好?Windows系统上的开发就是用...~~~ 如果在linux下,随便建立一个文本文档,写一段c,然后改后缀为.c在终端里面运行一下 ogg,这就...

㈥ linux系统下面怎么收藏网页

看你用什么浏览器咯,一般的浏览器都有收藏功能的,比如:
Epiphany-->书签--添加书签
Galeon Web-->书签--添加书签
Chromium Web Browser-->Page Save As...
Iceweasel-->书签--将此页加为书签
Rekonq-->书签--Add Bookmark

在书签管理方面,值得一提的是rekonq这款浏览器,可以直接在地址栏进行书签、历史及网页进行搜索~~~

㈦ 如何在Linux下安装cmake-gui

OpenCV 2.2以后的版本需要使用Cmake生成makefile文件,因此需要先安装;还有其它一些软件都需要先安装cmake
1.在linux环境下打开网页浏览器,输入网址:http://www.cmake.org/cmake/resources/software.html,找到最新版本的位置。一般开放源代码软件都会有两个版本发布:Source Distribution 和 Binary Distribution,前者是源代码版,你需要自己编译成可执行软件。后者是已经编译好的可执行版,直接可以拿来用的。

2.在linux环境下打开终端,输入:
getconf LONG_BIT

如果结果是64表示该系统是linux64位的,如果结果是32则表示系统是linux32位。
3.我现在所用的这台是64位,因此在cmake安装包的网站中选择binary distribution下的linux x86_64下的cmake-3.6.0-Linux-x86 64.tar.gz压缩包,点击,下载。默认下载到了home/DOWNLOAD
4.把下载好的包复制到指定路径,比如/home/bnu,在当前文件夹中打开终端,输入
tar zxvf cmake-3.6.0-Linux-x86 64.tar.gz

在该目录下多了一个解压后的文件夹
5.打开新的终端,输入

该bashrc文件不用提前建立,路径也根据自己的情况改变,我定的路径与解压后的cmake包路径是一致的
6.此时会打开一个文件,找到export PATH=这些行,在这些行的下面另外添加一行,从而设置环境变量
export PATH=$PATH:/home/bnu/cmake-3.6.0-Linux-x86 64/bin

输入完毕保存
7.查看版本,测试是否安装成功:打开终端,输入
cmake --version

结果是:cmake version 3.6.0(安装cmake成功!)

㈧ linux怎么从网页下载东西

可以使用wget命令。Linux系统中的wget是一个下载文件的工具,它用在命令行下。wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦。
命令格式:wget [参数] [URL地址]
常用参数:
-O –output-document=FILE 把文档写到FILE文件中
-b, –background 启动后转入后台执行
-c, –continue 接着下载没下载完的文件
-i, –input-file=FILE 下载在FILE文件中出现的URLs
使用实例:
使用wget下载单个文件
wget python.org/ftp/python/3.4.3/python-3.4.3.msi

㈨ 在linux系统下,已经编写好了c的代码,怎样保存退出然后进行编译啊

vim或vi在编辑模式下,按esc退出编辑模式,再:wq保存退出vim,最后在gcc 执行,前提安装了gcc,没装的话直接yum install gcc

㈩ 本地机连接上LINUX后利用curl 下载网页到本地,保存在哪

通过ssh链接到linux后 ,所谓的本地均是指linux服务器 ,至于保存路径, 看你curl命令指定的目的路径了 不指定的话 是当前路径

阅读全文

与linuxc保存网页相关的资料

热点内容
vb编写一个简单计算器程序代码 浏览:381
app代充怎么赚钱 浏览:133
湖南省大数据发展 浏览:838
ip和数据哪个好看 浏览:409
linux文件驱动 浏览:511
超大数据中心 浏览:697
工作文件系统如何建立 浏览:307
利用文件中的内容初始化 浏览:935
马云支付宝用到的大数据技术 浏览:333
厦门大数据战略 浏览:720
6s如何设置app切换 浏览:724
西门子编程软件在官方网站哪里找 浏览:511
大数据社会调研报告 浏览:172
数据中的属性有哪些类型 浏览:176
苹果6手机支付宝加密 浏览:480
大数据的内涵以下理解 浏览:92
word2007组合 浏览:643
定向士官在什么网站报志愿填报 浏览:332
hyp是什么文件格式 浏览:720
编程哪里学靠谱 浏览:224

友情链接