- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Linux 上的 C 中的 opendir/readdir 函数从给定目录中读取文件,如果文件满足某些参数(如大小和类型)将被复制到某个目录,从中读取文件的目录以及目标和大小是从“.ini”文件中读取,问题是当我将 opendir 与 ie opendir(argv[1]) 一起使用时,没有问题,但是如果我将“.ini”文件中的值转换为一个名为 ie search_path 的字符 * 和将它传递给 opendir
由于 opendir(search_path) 代码不起作用,我收到消息“没有这样的文件或目录”,这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/sendfile.h>
#include <fcntl.h>
#include <dirent.h>
#include <string.h>
#include <stdint.h>
#include <unistd.h>
#include "minIni.h"
#define sizearray(a) (sizeof(a) / sizeof((a)[0]))
/*Default values for minIni library function ini_gets*/
#define DEFAULT_FILE_SIZE "100000"
#define DEFAULT_FIREFOX_CACHE "~/.cache/mozilla/firefox/43ty8soo.default-release/cache2/entries/"
#define DEFAULT_CHROMIUM_CACHE "~/.cache/chromium/Default/Cache/"
#define DEFAULT_DEST_DIR "/home/newbee/found/"
/*Utility functions*/
void error(const char *s);
int OSCopyFile(const char *, const char *);
int interesting(char *);
int filesize(char *);
int get_config(char *browser, int *min_filesize, char *cache_dir, char *dest);
int main(int argc, char * argv[]){
if (argc < 2) {
fprintf(stderr, "Usage: %s <browser-name>\n", argv[0]);
exit(EXIT_FAILURE);
}
/*the only argument to the program is the browser in which cache*/
/*we want the exploration.*/
char *browser_name = argv[1];
/*Here i call get_config, that function returns the minimum size for*/
/*the files (min_file_size), where to search (cache), and where to*/
/*put the files that met the requirements (dest_dir_conf).*/
char *cache = malloc(PATH_MAX);
char *dest_dir_conf = malloc(PATH_MAX);
int min_file_size;
int result_config = get_config(
browser_name, &min_file_size, cache, dest_dir_conf);
if (result_config != 1)
exit(EXIT_FAILURE);
DIR *dir;
struct dirent *ent;
printf("[DEBUG] %s\n", cache);
/*And there is the problem, no matters if i pass the 'cache' variable*/
/*or if i harcoded a string here, opendir failed and error is:*/
/*No such file or directory*/
chdir(cache);
dir = opendir(cache);
if (dir == NULL)
error("Error");
char *dest = NULL;
int count = 0;
while ((ent = readdir(dir)) != NULL) {
if ((strcmp(ent->d_name, ".") != 0) && (strcmp(ent->d_name, "..") != 0)) {
/*The interesting function determine if the file is of a given type and*/
/*return 1 if true, and 0 if not.*/
if ((interesting(ent->d_name))
&& (filesize(ent->d_name) >= min_file_size)) {
dest = malloc(strlen(dest_dir_conf) + strlen(ent->d_name));
strcpy(dest, dest_dir_conf);
strcat(dest, ent->d_name);
OSCopyFile(ent->d_name, dest);
count++;
}
}
}
closedir(dir);
printf("[Job finish, %d files was copied.]\n", count);
return EXIT_SUCCESS;
}
/** errors info. **/
void error(const char *s) {
perror(s);
exit(EXIT_FAILURE);
}
/** get the file size. **/
int filesize(char *archivo) {
FILE *fp;
long fsize;
fp = fopen(archivo, "r");
if (fp) {
fseek(fp, 0L, SEEK_END);
fsize = ftell(fp);
fclose(fp);
return fsize;
}
return -1;
}
/** copy files. **/
int OSCopyFile(const char *source, const char *destination) {
int input, output;
if ((input = open(source, O_RDONLY)) == -1)
return -1;
if ((output = creat(destination, 0660)) == -1) {
close(input);
return EXIT_FAILURE;
}
#if defined(__APPLE__) || defined(__FreeBSD__)
int result = fcopyfile(input, output, 0, COPYFILE_ALL);
#else
off_t bytesCopied = 0;
struct stat fileinfo = {0};
fstat(input, &fileinfo);
int result = sendfile(output, input, &bytesCopied, fileinfo.st_size);
#endif
close(input);
close(output);
return result;
}
/** determine if the file is interesting (for me, at least ;) ). **/
int interesting(char *filename) {
uint16_t type;
FILE *f = fopen(filename, "r");
if (!f) {
printf("Error opening file '%s'.\n", filename);
return 0;
}
fread(&type, sizeof(uint16_t), 1, f);
fclose(f);
switch (type) {
case 0xD8FF: // jpg
case 0x5089: // png
case 0x4D42: // bmp
case 0x4952: // webp
case 0x4947: // gif
case 0x3F3C: // possible svg.
case 0x0000: // possible mp4.
case 0x5025: // pdf.
return 1;
default: // not interesting.
return 0;
}
}
/*Gets the configuration from a INI file*/
int get_config(
char *browser, int *min_filesize, char *cache_dir, char *dest) {
const char ini_file[] = "config.ini";
char filesize_conf[100];
long entry_length;
entry_length = ini_gets("settings", "image_size_bytes", DEFAULT_FILE_SIZE,
filesize_conf, sizearray(filesize_conf), ini_file);
*min_filesize = atoi(filesize_conf);
if (strcmp(browser, "firefox") == 0)
entry_length = ini_gets("settings", "firefox_cache",
DEFAULT_FIREFOX_CACHE, cache_dir, 255, ini_file);
else if (strcmp(browser, "chromium") == 0)
entry_length = ini_gets("settings", "chromium_cache",
DEFAULT_CHROMIUM_CACHE, cache_dir, 255, ini_file);
else {
fprintf(stderr,
"There is no configuration for %s browser.\n", browser);
exit(EXIT_FAILURE);
}
entry_length = ini_gets("settings", "destination_dir", DEFAULT_DEST_DIR,
dest, 255, ini_file);
if (entry_length <= 0)
return 0;
return 1;
}
dir = opendir(cache);
最佳答案
when i use opendir with i.e opendir(argv[1]) there is no problem
argv[1]
包含
~/.cache/...
的扩展版本感谢在可执行文件启动之前调用 shell 的评估。
~/.cache/...
这样的路径至
opendir
不起作用:C 库不评估
~
到用户目录或环境变量。
~
使其兼容。明确并替换为
getenv("HOME")
,像这样非常不安全(但有效)的代码:
const char *s = "~/.cache/.something";
...
char aux[1024];
if (s[0]=='~')
{
sprintf(aux,"%s%s",getenv("HOME"),s+1);
s = aux;
}
s
开始于
~
if 将被评估并替换为(将指向)
aux
.
malloc
即使不进行替换也分配字符串(和
free
稍后)。这不是重点,但在 C 中正确处理字符串总是很棘手。
关于c - opendir在C语言中没有获取缓冲区char *的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59618419/
我需要您在以下方面提供帮助。近一个月来,我一直在阅读有关任务和异步的内容。 我想尝试在一个简单的 wep api 项目中实现我新获得的知识。我有以下方法,并且它们都按预期工作: public Htt
我的可执行 jar 中有一个模板文件 (.xls)。不需要在运行时我需要为这个文件创建 100 多个副本(稍后将唯一地附加)。用于获取 jar 文件中的资源 (template.xls)。我正在使用
我在查看网站的模型代码时对原型(prototype)有疑问。我知道这对 Javascript 中的继承很有用。 在这个例子中... define([], function () { "use
影响我性能的前三项操作是: 获取滚动条 获取偏移高度 Ext.getStyle 为了解释我的应用程序中发生了什么:我有一个网格,其中有一列在每个单元格中呈现网格。当我几乎对网格的内容做任何事情时,它运
我正在使用以下函数来获取 URL 参数。 function gup(name, url) { name = name.replace(/[\[]/, '\\\[').replace(/[\]]/,
我最近一直在使用 sysctl 来做很多事情,现在我使用 HW_MACHINE_ARCH 变量。我正在使用以下代码。请注意,当我尝试获取其他变量 HW_MACHINE 时,此代码可以完美运行。我还认为
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 9 年前。 要求提供代码的问题必须表现出对所解决问题的最低限度的理解。包括尝试过的解决方案、为什么
由于使用 main-bower-files 作为使用 Gulp 的编译任务的一部分,我无法使用 node_modules 中的 webpack 来require 模块code> dir 因为我会弄乱当
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我使用 Gridlayout 在一行中放置 4 个元素。首先,我有一个 JPanel,一切正常。对于行数变大并且我必须能够向下滚动的情况,我对其进行了一些更改。现在我的 JPanel 上添加了一个 J
由于以下原因,我想将 VolumeId 的值保存在变量中: #!/usr/bin/env python import boto3 import json import argparse import
我正在将 MSAL 版本 1.x 更新为 MSAL-browser 的 Angular 。所以我正在尝试从版本 1.x 迁移到 2.X.I 能够成功替换代码并且工作正常。但是我遇到了 acquireT
我知道有很多关于此的问题,例如 Getting daily averages with pandas和 How get monthly mean in pandas using groupby但我遇到
This is the query string that I am receiving in URL. Output url: /demo/analysis/test?startDate=Sat+
我正在尝试使用 javascript 中的以下代码访问 Geoserver 层 var gkvrtWmsSource =new ol.source.ImageWMS({ u
API 需要一个包含授权代码的 header 。这就是我到目前为止所拥有的: var fullUrl = 'https://api.ecobee.com/1/thermostat?json=\{"s
如何获取文件中的最后一个字符,如果是某个字符,则删除它而不将整个文件加载到内存中? 这就是我目前所拥有的。 using (var fileStream = new FileStream("file.t
我是这个社区的新手,想出了我的第一个问题。 我正在使用 JSP,我成功地创建了 JSP-Sites,它正在使用jsp:setParameter 和 jsp:getParameter 具有单个字符串。
在回答 StoreStore reordering happens when compiling C++ for x86 @Peter Cordes 写过 For Acquire/Release se
我有一个函数,我们将其命名为 X1,它返回变量 Y。该函数在操作 .on("focusout", X1) 中使用。如何获取变量Y?执行.on后X1的结果? 最佳答案 您可以更改 Y 的范围以使其位于函
我是一名优秀的程序员,十分优秀!