- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要一个程序来计算文件数,找到其中最大的文件以及目录和子目录中文件的总和(分别用于子目录)问题是:我的程序总是尝试通过链接访问,但我不需要那个!我尝试查找链接和套接字文件,但有些东西不起作用
#include <dirent.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/fcntl.h>
#include <sys/wait.h>
#include <time.h>
#include <unistd.h>
#include <malloc.h>
struct stat st;
struct dirent * d;
off_t sz[10000];
FILE *fp;
char PROG_NAME[100];
char FILE_NAME[100];
char * nm[10000],* maxn;
int rec1(char * rp);
int main (int argc, char *argv[])
{
/*//it's for terminal
//how much arguments
if (argc < 3)
{
printf("Too few arguments\n");
return 1;
};
if (argc> 3)
{
printf("Too many arguments\n");
return 1;
};
FILE * fp; //filepath
if ((fp=fopen(argv[2],"w"))==NULL)
{
fprintf(stderr,"%s fopen: %s %s\n",argv[0],argv[2],strerror(errno));
return 1;
};
if (fclose(fp)==-1)
{
fprintf(stderr,"%s fclose: %s %s\n",argv[0],argv[2],strerror(errno));
return 1;
};
strcpy(PROG_NAME,argv[0]);
strcpy(FILE_NAME,argv[2]);*/
strcpy(PROG_NAME,"Prog1");
strcpy(FILE_NAME,"out.txt");
char a[100]="/dev/"; //directory where we start
if ((fp=fopen(FILE_NAME,"w"))==NULL)
{
fprintf(stderr,"%s fopen: %s %s\n",PROG_NAME,FILE_NAME,strerror(errno));
return 1;
};
rec1(a);
if (fclose(fp)==-1)
{
fprintf(stderr,"%s fclose: %s %s\n",PROG_NAME,FILE_NAME,strerror(errno));
return 1;
};
exit(EXIT_SUCCESS);
}
int rec1(char * rp)
{
int i=0;
off_t sb=0,ts=0;//
char nb[1000], s[1000];
DIR * dp;//dirpath
strcpy(nb,"");//занулим nb
if ((dp=opendir(rp)) == NULL)
{
fprintf(stderr,"%s opendir: %s %s \n",PROG_NAME,rp,strerror(errno));
return 1;
};
while ((d=readdir(dp))!=NULL)
{
if (strcmp(d->d_name,".")!= 0 && strcmp(d->d_name,"..")!= 0)
{
strcpy(s,realpath(rp,NULL));
if (s[strlen(s)-1] != '/')
{
strcat(s,"/");
};
strcat(s,d->d_name);
stat(s,&st);//вызывает stat
if (stat(s,&st) != 0)
{
printf(" %s :error stat file: %s \n",PROG_NAME, s);
}
else
{
if (!S_ISDIR(st.st_mode))
{
if (st.st_size>sb)
{
strcpy(nb,d->d_name);
sb=st.st_size;
};
i++;
ts+=st.st_size;
}
else//!!!!!!!!!!!!!!!!!!!!!!!!!!!!
{
if (S_ISDIR(st.st_mode)&&(!(S_ISLNK(st.st_mode)))&&(!S_ISSOCK(st.st_mode))
&&(!S_ISFIFO(st.st_mode))&&(!S_ISCHR(st.st_mode))&&(!S_ISBLK(st.st_mode)))
{
rec1(s);
};
};
};
};
};
printf("%s %ld %ld %s \n",rp,i,ts,nb);
fprintf(fp,"%s %ld %ld %s \n",rp,i,ts,nb);
if (closedir(dp)==-1)
{
printf("%s closedir: %s %s \n",PROG_NAME,rp,strerror(errno));
return 1;
};
}
`当脚本找到前目录的链接文件时,它会循环。试图避免链接转换但失败了。尝试定义/dev/fd/4.../dev/fd/23 文件但总是错误“没有这样的文件或目录”
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char *argv[])
{
struct stat sb;
if (argc != 2) {
fprintf(stderr, "Usage: %s <pathname>\n", argv[0]);
exit(EXIT_FAILURE);
}
if (stat(argv[1], &sb) == -1) {
perror("stat");
exit(EXIT_FAILURE);
}
printf("File type: ");
switch (sb.st_mode & S_IFMT) {
case S_IFBLK: printf("block device\n"); break;
case S_IFCHR: printf("character device\n"); break;
case S_IFDIR: printf("directory\n"); break;
case S_IFIFO: printf("FIFO/pipe\n"); break;
case S_IFLNK: printf("symlink\n"); break;
case S_IFREG: printf("regular file\n"); break;
case S_IFSOCK: printf("socket\n"); break;
default: printf("unknown?\n"); break;
}
printf("I-node number: %ld\n", (long) sb.st_ino);
printf("Mode: %lo (octal)\n",
(unsigned long) sb.st_mode);
printf("Link count: %ld\n", (long) sb.st_nlink);
printf("Ownership: UID=%ld GID=%ld\n",
(long) sb.st_uid, (long) sb.st_gid);
printf("Preferred I/O block size: %ld bytes\n",
(long) sb.st_blksize);
printf("File size: %lld bytes\n",
(long long) sb.st_size);
printf("Blocks allocated: %lld\n",
(long long) sb.st_blocks);
printf("Last status change: %s", ctime(&sb.st_ctime));
printf("Last file access: %s", ctime(&sb.st_atime));
printf("Last file modification: %s", ctime(&sb.st_mtime));
exit(EXIT_SUCCESS);
}
请帮帮我
最佳答案
当您应该使用 lstat()
时,您却在使用 stat()
。来自lstat()
manual page :
lstat() is identical to stat(), except that if path is a symbolic link, then the link itself is stat-ed, not the file that it refers to.
关于c - 文件 link(device,socket)/dev/fd/need avoid links transition 的 Linux C 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5641882/
正如我不断发现的那样,有各种各样的文件描述符——几乎所有的东西都是围绕文件描述符抽象出来的:常规文件、套接字、信号和计时器(例如)。所有文件描述符都只是整数。 给定一个文件描述符,是否可以知道它是什么
socket fd 长什么样子? 什么是 socket fd ?粗糙的来讲,就是网络 fd,比如我们最常见的 C/S 客户端服务端的编程模式,就是网络通信的一种方式。撇开底层
如果我调用了shutdown(fd,SHUT_RDWR),但没有调用close(fd),会发生什么? inline void CSocket::close() { if (_socket_fd
我有以下结构: struct myfds_for_nic { int fd1; int fd2; int fd3; int fd4; int fd5;
fd 是否有等价于 fseek 的东西?我已经使用 int fds 很长时间了,想使用 fseek...但我知道没有搜索功能。 提前致谢! 最佳答案 参见 POSIX 函数 lseek(2) : SY
我正在使用 Clojure 的 core.logic CLP(FD) 库(core.logic 版本 0.8.3)开发一种简单的方形打包算法。 正方形的表示方式如下: [[[x11 y11] [x12
我正在学习 linux 操作系统,我有一个关于管道的问题。 我想实现一个管道。 所以我定义了int fd[2]; 但是为什么fd[0]是读而fd[1]是写呢? 0代表stdin吗? (我认为是写)而1
我知道进程的pid,需要获取它使用的socketfd,所以在/proc/$pid/中查找fd,例如: $ ls -la /proc/1442/fd | grep socket lrwx------ 1
我正在检查当前 fatrace 的源代码。 调用fanotify获取数据值的主循环如下: res = read (fan_fd, buffer, 4096); ... data
Docker daemon documentation建议大多数设置使用以下 hosts 选项: dockerd -H fd:// 我猜 fd 代表文件描述符。我不明白 fd 如何用于套接字通信。 我
在执行之前:os.read(fd,1024) 我想检查是否会有输出,而不是挂起直到收到输出。由于 fd 是一个 int 对象,我不能这样做: os.fstat(f.fileno()).st_size
我有一个程序 ( https://github.com/raboof/connbeat ) 依赖于 /proc/[pid]/fd/* 来查找给定(网络)inode 的进程。 /proc/[pid]/f
#define STACK_SIZE (1024 * 1024) static char container_stack[STACK_SIZE]; char* const container_args
inotify file in C 我看过下面的代码用来调用 (void) inotify_rm_watch(fd, wd); (void) close(fd); 为什么不呢? inotify_rm_
下面的小 C 程序(我们称之为 pointless): /* pointless.c */ #include #include void main(){ write(STDOUT_FILENO
考虑这个代码示例: #include #include #include int main() { //this file exists and contains data: "ABCD
在父进程中close(fd[1]);, 为什么它会跳过第一个 fd[1](替换为父 STD_OUT)并在子进程中关闭 fd[1]? #define STD_INPUT 0 #define STD_OU
需要使用代理设置运行模拟器,我在命令提示符下使用以下命令来启动模拟器 emulator -avd AVD_for_3_7_WVGA_Nexus_One -http-proxy http://usern
我正在 appcelerator studio 中创建应用程序。在我向其添加 admob 模块之前,它在我的 Android 6 Lenovo a7000 上正常运行。现在我收到这些错误: [ERRO
我不明白必须如何解决以下问题。非常感谢任何帮助学习如何解决这个问题的人! Consider Relation Schema R = {ABCDEFG} with a set of Functional
我是一名优秀的程序员,十分优秀!