经典 书籍上都有啊
steven 的书!
good luck
② Linux下C语言编程用的readdir()实例
第一:linux下不成认无返回值的main方法
第二:你这个若成功,也只能够读取/etc/rc.d目录下的内容
#include<sys/types.h>
#include <stdio.h>
#include<dirent.h>
#include<unistd.h>
int main(int argc,char **argv)
{
DIR * dir;
struct dirent * ptr;
int i;
if(argc==1)
dir=opendir("./");
else
dir=opendir(argv[1]);
while((ptr=readdir(dir))!=NULL)
{
printf("d_name: %s\n",ptr->d_name);//需要更详细的信息你可以修改该句
}
closedir(dir);
return 0;
}
③ linux下,编写一个c语言程序实现...(详细见正文)!急!200分悬赏!
参考ln -l命令的输出结果,编写了以下程序(即输出结果和ls -l命令的输出结果相似),通过命令行传入要查看的目录,如果没有传入参数,则显出当前目录:
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pwd.h>
#include <time.h>
char *getmod(mode_t mode,char *line) /*生成权限描述字符串*/
{
memset(line,0,sizeof(char)*11);
strcat(line,S_ISDIR(mode)?"d":"-");
strcat(line,(mode&S_IRWXU)&S_IRUSR?"r":"-");
strcat(line,(mode&S_IRWXU)&S_IWUSR?"w":"-");
strcat(line,(mode&S_IRWXU)&S_IXUSR?"x":"-");
strcat(line,(mode&S_IRWXG)&S_IRGRP?"r":"-");
strcat(line,(mode&S_IRWXG)&S_IWGRP?"w":"-");
strcat(line,(mode&S_IRWXG)&S_IXGRP?"x":"-");
strcat(line,(mode&S_IRWXO)&S_IROTH?"r":"-");
strcat(line,(mode&S_IRWXO)&S_IWOTH?"w":"-");
strcat(line,(mode&S_IRWXO)&S_IXOTH?"x":"-");
return line;
}
char *directory(char *argv) /*从程序参数取出目录*/
{
int i;
for (i=strlen(argv)-1;i;--i)
if (argv[i]=='/'){
argv[i+1]='\0';
break;
}
return argv;
}
int main(int argc,char *argv[])
{
DIR *dirp;
struct dirent *dirst;
struct stat finfo;
char *path,fname[512],mod[11],ctm[10];
struct passwd *user=NULL;
struct tm *ltm;
if (argc==1) path=directory(argv[0]);
else path=argv[1];
dirp=opendir(path);
if (!dirp)
{
fprintf(stderr,"ERROR\n");
exit(-1);
}
for (dirst=readdir(dirp);dirst;dirst=readdir(dirp))
{
strcpy(fname,path);
lstat(strcat(strcat(fname,"/"),dirst->d_name),&finfo);
user=getpwuid(finfo.st_uid);
printf("%s\t%10s\t",getmod(finfo.st_mode,mod),user->pw_name);
printf("%10d\t%9d\t",finfo.st_ino,finfo.st_size);
ltm=localtime(&finfo.st_mtime);
strftime(ctm,9,"%b",ltm);
printf("%5s",ctm);
strftime(ctm,9,"%d",ltm);
printf("%3s",ctm);
strftime(ctm,9,"%Y",ltm);
printf("%5s\t",ctm);
printf("%s\n",dirst->d_name);
}
closedir(dirp);
return 0;
}
④ linux c的程序
#include <stdio.h>
#include <time.h>
timer_t g_stTimer ;
#define TIMER (10 ) //10 sec
timer_t start_timer(int tv_sec, int tv_usec, int Again)
{
timer_t tId = 0;
struct sigevent tSigEvent = {0};
struct itimerspec tItimerSpec = {0};
tSigEvent.sigev_value.sival_ptr = pTimerSignalInfo;
tSigEvent.sigev_notify = SIGEV_SIGNAL;
tSigEvent.sigev_signo = SIGUSR1;
if(timer_create(CLOCK_REALTIME, &tSigEvent, &tId) < 0)
{
printf("start_timer timer_create failed, errno = %d.\r\n", errno);
return 0;
}
if(nTvSec == 0 && nTvUsec == 0)
{
tItimerSpec.it_value.tv_sec = 1;
}
else
{
tItimerSpec.it_value.tv_sec = nTvSec;
}
tItimerSpec.it_value.tv_nsec = nTvUsec * 1000;
if(nAgain == 1)
{
tItimerSpec.it_interval.tv_sec = tItimerSpec.it_value.tv_sec;
tItimerSpec.it_interval.tv_nsec = tItimerSpec.it_value.tv_nsec;
}
else
{
tItimerSpec.it_interval.tv_sec = 0;
tItimerSpec.it_interval.tv_nsec = 0;
}
if(timer_settime(tId, 0, &tItimerSpec, NULL) < 0)
{
timer_delete(tId);
printf("start timer timer_settime failed, errno = %d.\r\n", errno);
return 0;
}
return tId;
}
void read_control()
{
//read control process
}
int main()
{
struct sigaction stTimer;
memset(&stTimer, 0, sizeof(stTimer));
stTimer.sa_flags = 0;
sigemptyset(&stTimer.sa_mask);
stTimer.sa_handler = read_control();
sigaction(SIGUSR1, &stTimer, NULL);
g_stTimer = start_timer( TIMER, 0, 1);
while(1)
{
printf("waiting .....");
}
return 0;
}
⑤ 如何用GCC在linux下编译C语言程序
在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器,假设我们有下面一个非常简单的源程序(hello.c):
int main(int argc,char **argv)
{
printf("Hello Linux
");
}
要编译这个程序,我们只要在命令行下执行:
gcc -o hello hello.c
gcc 编译器就会为我们生成一个hello的可执行文件.执行./hello就可以看到程
序的输出结果了
⑥ Linux下写一个c程序,创建一个子进程,利用execl系统调用,若成功则去执行ls-l命令。
#include <stdio.h>
#include <unistd.h>
int main()
{
int pid;
pid = fork();
if (pid < 0)
{
printf("Failed to fork!\n");
return 1;
}
if (pid > 0)
{
wait(NULL);
}
else
{
execlp("/bin/ls", "/bin/ls", "-l", NULL);
}
return 0;
}
⑦ c语言实例,linux线程同步的信号量方式 谢谢
这么高的悬赏,实例放后面。信号量(sem),如同进程一样,线程也可以通过信号量来实现通信,虽然是轻量级的。信号量函数的名字都以"sem_"打头。线程使用的基本信号量函数有四个。
信号量初始化。
intsem_init(sem_t*sem,intpshared,unsignedintvalue);
这是对由sem指定的信号量进行初始化,设置好它的共享选项(linux只支持为0,即表示它是当前进程的局部信号量),然后给它一个初始值VALUE。
等待信号量。给信号量减1,然后等待直到信号量的值大于0。
intsem_wait(sem_t*sem);
释放信号量。信号量值加1。并通知其他等待线程。
intsem_post(sem_t*sem);
销毁信号量。我们用完信号量后都它进行清理。归还占有的一切资源。
intsem_destroy(sem_t*sem);
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
#include<pthread.h>
#include<semaphore.h>
#include<errno.h>
#definereturn_if_fail(p)if((p)==0){printf("[%s]:funcerror!/n",__func__);return;}
typedefstruct_PrivInfo
{
sem_ts1;
sem_ts2;
time_tend_time;
}PrivInfo;
staticvoidinfo_init(PrivInfo*thiz);
staticvoidinfo_destroy(PrivInfo*thiz);
staticvoid*pthread_func_1(PrivInfo*thiz);
staticvoid*pthread_func_2(PrivInfo*thiz);
intmain(intargc,char**argv)
{
pthread_tpt_1=0;
pthread_tpt_2=0;
intret=0;
PrivInfo*thiz=NULL;
thiz=(PrivInfo*)malloc(sizeof(PrivInfo));
if(thiz==NULL)
{
printf("[%s]:Failedtomallocpriv./n");
return-1;
}
info_init(thiz);
ret=pthread_create(&pt_1,NULL,(void*)pthread_func_1,thiz);
if(ret!=0)
{
perror("pthread_1_create:");
}
ret=pthread_create(&pt_2,NULL,(void*)pthread_func_2,thiz);
if(ret!=0)
{
perror("pthread_2_create:");
}
pthread_join(pt_1,NULL);
pthread_join(pt_2,NULL);
info_destroy(thiz);
return0;
}
staticvoidinfo_init(PrivInfo*thiz)
{
return_if_fail(thiz!=NULL);
thiz->end_time=time(NULL)+10;
sem_init(&thiz->s1,0,1);
sem_init(&thiz->s2,0,0);
return;
}
staticvoidinfo_destroy(PrivInfo*thiz)
{
return_if_fail(thiz!=NULL);
sem_destroy(&thiz->s1);
sem_destroy(&thiz->s2);
free(thiz);
thiz=NULL;
return;
}
staticvoid*pthread_func_1(PrivInfo*thiz)
{
return_if_fail(thiz!=NULL);
while(time(NULL)<thiz->end_time)
{
sem_wait(&thiz->s2);
printf("pthread1:pthread1getthelock./n");
sem_post(&thiz->s1);
printf("pthread1:pthread1unlock/n");
sleep(1);
}
return;
}
staticvoid*pthread_func_2(PrivInfo*thiz)
{
return_if_fail(thiz!=NULL);
while(time(NULL)<thiz->end_time)
{
sem_wait(&thiz->s1);
printf("pthread2:pthread2gettheunlock./n");
sem_post(&thiz->s2);
printf("pthread2:pthread2unlock./n");
sleep(1);
}
return;
}
⑧ 在linux下设计一个c程序,谢谢啦~~~
#include<stdio.h>
//#include"luoyan2.c"
void main()
{
int m,n,x,y;
int gongyueshu(int m,int n);
int gongbeishu(int m,int n);
printf("请输入两个数:");
scanf("%d,%d",&m,&n);
x=gongyueshu(m,n);
y=gongbeishu(m,n);
printf("公约数是:%d\n",x);
printf("公倍数是:%d\n",y);
}
#include<stdio.h>
int gongyueshu(int m,int n)
{
int r;
if(n%m==0) r=m;
else if(m%n==0) r=n;
else r=1;
return(r);
}
int gongbeishu(int m,int n)
{
int p;
if(n%m==0) p=n;
else if(m%n==0) p=m;
else p=n*m;
return(p);
}