尝试linux下c简单编程,从java到c真不习惯
2008-04-09 13:34
204 查看
打了打书上代码,感觉从java到linux上的c真的好不习惯...
以前也写过C++,不过没有感觉这么乱~~~~~~
.h库里的文件写的也太飘逸了吧,一个个宏,一个个看不到内部结构的方法
只是拿过来用用,看不到实现的方法,真是揪心阿.....
哎,甭管怎样,也是顺利写了几个小的程序,当个小笔记,供以后查阅吧~
1 linux上,获取登录用户的信息
在pwd.h中定义了口令数据库的结构passwd, 它包含了一些用户的信息.
unistd.h中getuid(void)方法可以获得用户的id
#include <sys/types.h>
#include <pwd.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char **argv )...{
uid_t uid;
gid_t gid;
struct passwd *pw;
uid = getuid( );
gid = getgid( );
printf( "user id is:%d, group id is:%d ", uid, gid ); //如果用root登,打印出来的竟然是null, 奇怪ing
pw = getpwuid( uid );
printf( "user login name is:%s ", pw->pw_name );
printf( "user uid is:%s ", pw->pw_uid );
printf( "user gid is:%s ", pw->pw_gid );
printf( "user login shell is:%s ", pw->pw_shell );
return 0;
}
2 文件信息读取
a.char *avgv[]中存放了运行时后续的参数
如./file "file"
那么argv[0]中存放的是"./file"
argv[1]中方方的是"file"
b.stat.h中定义了struct stat
此程序用运用int lstat(const char *filename, struct stat *buf ); 来将buf赋值
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
int main(int args, char *argv[ ] )...{
int i;
struct stat buf;
printf("argv[0]%s argv[1]%s ",argv[0],argv[1]);
char *ptr;
if( argv<2 )...{
printf("Usage: ./file [filename] " );
exit(1);
}
if( lstat(argv[1], &buf)<0 )...{
perror( "lstat" );
exit( 1 );
}
if( S_ISREG( buf.st_mode ) )
ptr = "regular";
else if( S_ISDIR( buf.st_mode ) )
ptr = "directory";
else ptr = "other mode"; //用的与操作此处我简写了,还有很多的状态,如S_IFLNK判度是否为符 //号连接
printf( "File %s is %s file ",argv[ 1 ],ptr );
if( S_ISREG( buf.st_mode ) )
printf( "File size is %d bytes ",buf.st_size );
return 0;
}
3 新建临时文件
stdio.h中,linux下建立临时文件方法
char *tmpnam(char *s);
FILE *tmpfile(void);
#include <stdio.h>
int main( )...{
char tmpname[ L_tmpnam ];
char *filename;
FILE *fp;
filename = tmpnam( tmpname );
printf( "Temporary file name: %s ", filename );
fp = tmpfile( );
if( fp )...{
printf( "Temporary file opened. " );
}
else
perror( "tmpfile" );
return 0;
}
4 获取进程pid
getpid()为获取进程号
getppid()为获取父进程号
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main( )...{
printf( "PID = %d ", getpid( ) );
printf( "PPID = %d ", getppid( ) );
sleep( 30 );
exit( EXIT_SUCCESS );
}
[注:代码自《linux程序设计权威指南》]
以前也写过C++,不过没有感觉这么乱~~~~~~
.h库里的文件写的也太飘逸了吧,一个个宏,一个个看不到内部结构的方法
只是拿过来用用,看不到实现的方法,真是揪心阿.....
哎,甭管怎样,也是顺利写了几个小的程序,当个小笔记,供以后查阅吧~
1 linux上,获取登录用户的信息
在pwd.h中定义了口令数据库的结构passwd, 它包含了一些用户的信息.
unistd.h中getuid(void)方法可以获得用户的id
#include <sys/types.h>
#include <pwd.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char **argv )...{
uid_t uid;
gid_t gid;
struct passwd *pw;
uid = getuid( );
gid = getgid( );
printf( "user id is:%d, group id is:%d ", uid, gid ); //如果用root登,打印出来的竟然是null, 奇怪ing
pw = getpwuid( uid );
printf( "user login name is:%s ", pw->pw_name );
printf( "user uid is:%s ", pw->pw_uid );
printf( "user gid is:%s ", pw->pw_gid );
printf( "user login shell is:%s ", pw->pw_shell );
return 0;
}
2 文件信息读取
a.char *avgv[]中存放了运行时后续的参数
如./file "file"
那么argv[0]中存放的是"./file"
argv[1]中方方的是"file"
b.stat.h中定义了struct stat
此程序用运用int lstat(const char *filename, struct stat *buf ); 来将buf赋值
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
int main(int args, char *argv[ ] )...{
int i;
struct stat buf;
printf("argv[0]%s argv[1]%s ",argv[0],argv[1]);
char *ptr;
if( argv<2 )...{
printf("Usage: ./file [filename] " );
exit(1);
}
if( lstat(argv[1], &buf)<0 )...{
perror( "lstat" );
exit( 1 );
}
if( S_ISREG( buf.st_mode ) )
ptr = "regular";
else if( S_ISDIR( buf.st_mode ) )
ptr = "directory";
else ptr = "other mode"; //用的与操作此处我简写了,还有很多的状态,如S_IFLNK判度是否为符 //号连接
printf( "File %s is %s file ",argv[ 1 ],ptr );
if( S_ISREG( buf.st_mode ) )
printf( "File size is %d bytes ",buf.st_size );
return 0;
}
3 新建临时文件
stdio.h中,linux下建立临时文件方法
char *tmpnam(char *s);
FILE *tmpfile(void);
#include <stdio.h>
int main( )...{
char tmpname[ L_tmpnam ];
char *filename;
FILE *fp;
filename = tmpnam( tmpname );
printf( "Temporary file name: %s ", filename );
fp = tmpfile( );
if( fp )...{
printf( "Temporary file opened. " );
}
else
perror( "tmpfile" );
return 0;
}
4 获取进程pid
getpid()为获取进程号
getppid()为获取父进程号
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main( )...{
printf( "PID = %d ", getpid( ) );
printf( "PPID = %d ", getppid( ) );
sleep( 30 );
exit( EXIT_SUCCESS );
}
[注:代码自《linux程序设计权威指南》]
相关文章推荐
- java Swing编程之布局管理器简单实例DEMO
- java 网络编程之UDP通信和简单的群聊程序
- Linux socket编程(四) 简单聊天室之epoll版
- Linux C Socket编程原理及简单实例
- java网络编程____简单的字符流操作(reader,writer)
- java网络编程一:Socket用法,简单模拟一对一聊天
- java网络编程——Socket和ServerSocket,套接字编程——简单聊天室改进
- 黄金点游戏的尝试与编程习惯的改变尝试
- Java持久性API(The Java Persistence API)-一个简单的实体持久性编程模型
- JavaGUI编程简单介绍
- Java工程师应该抛弃的10个编程习惯
- Linux下的C语言编程——进程的简单操作
- Linux下C编程-----IO/文件操作/内存映射 实现简单记录存储(3)
- Java- 网络编程 简单接触TCP
- java网络编程之简单客户端服务器
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简单介绍
- 最简单的java编程21点牌游戏
- linux网络编程简单C/S模型实现
- java游戏开发--简单的几行代码就完成了驱动小精灵的编程